From d67cc1b3c08a2a7c5212e51c9776d095b4503b0a Mon Sep 17 00:00:00 2001
From: shichongfu <shi_chongfu@163.com>
Date: 星期一, 19 六月 2023 09:20:23 +0800
Subject: [PATCH] 文档处理

---
 src/main/java/com/product/file/util/AsposeUtil.java |  844 ++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 520 insertions(+), 324 deletions(-)

diff --git a/src/main/java/com/product/file/util/AsposeUtil.java b/src/main/java/com/product/file/util/AsposeUtil.java
index 8a0688b..fff41cb 100644
--- a/src/main/java/com/product/file/util/AsposeUtil.java
+++ b/src/main/java/com/product/file/util/AsposeUtil.java
@@ -5,8 +5,9 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.math.RoundingMode;
-import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 
 import com.aspose.cells.Cells;
 import com.aspose.cells.PdfSaveOptions;
@@ -14,380 +15,575 @@
 import com.aspose.cells.Worksheet;
 import com.aspose.cells.WorksheetCollection;
 import com.aspose.slides.Presentation;
-import com.aspose.words.Document;
-import com.aspose.words.ImportFormatMode;
-import com.aspose.words.SaveFormat;
+import com.aspose.words.*;
 import com.product.core.exception.BaseException;
 import com.product.core.spring.context.SpringMVCContextHolder;
 import com.product.file.config.FileCode;
 
 public class AsposeUtil {
+    private static int OFFICE_XLS=1;
+    private static int OFFICE_WORD=2;
+    private static int OFFICE_PPT=3;
+    private static boolean OFFICE_XLS_=false;
+    private static boolean OFFICE_WORD_=false;
+    private static boolean OFFICE_PPT_=false;
 	//鏄惁鍒濆浜唋icense
-	private static boolean isInitLicense = false;
-
-	/**
-	 * 鑾峰彇license
-	 *
-	 * @return
-	 */
-	public static boolean getLicense(int type) throws BaseException {
-		//宸茬粡鍒濆杩囷紝涓嶅啀鍒濆
-		if (isInitLicense) {
-			return true;
-		}
-		boolean result = true;
-		InputStream is = null;
-		try {
-			is = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml");
-			com.aspose.cells.License excel = new com.aspose.cells.License();
-			excel.setLicense(is);
-
-			is = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml");
-			com.aspose.words.License word = new com.aspose.words.License();
-			word.setLicense(is);
-
-			is = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml");
-			com.aspose.slides.License ppt = new com.aspose.slides.License();
-			ppt.setLicense(is);
-
-			isInitLicense = true;
-		} catch (Exception e) {
-			result = false;
-			throw new BaseException(FileCode.DOC_CONVERT_FALL, e);
-		} finally {
-			if (is != null) {
+	private static boolean isInitLicense=false;
+    /**
+     * 鑾峰彇license
+     * @return
+     */
+    public static boolean getLicense(int type)throws BaseException {
+    	//宸茬粡鍒濆杩囷紝涓嶅啀鍒濆
+    	if(isInitLicense) {
+    		return true;
+    	}
+        boolean result = true;
+        InputStream is = null;
+        try {
+        	if(type==OFFICE_XLS && !OFFICE_XLS_ ) {
+                is = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml");
+                com.aspose.cells.License excel = new com.aspose.cells.License();
+                excel.setLicense(is);
+                OFFICE_XLS_=true;
+            }else if(type==OFFICE_WORD && !OFFICE_WORD_ ){
+                is =  AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml");
+                com.aspose.words.License word = new com.aspose.words.License();
+                word.setLicense(is);
+                OFFICE_WORD_=true;
+            }else if(type==OFFICE_PPT && ! OFFICE_PPT_) {
+                is =  AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml");
+                com.aspose.slides.License ppt = new com.aspose.slides.License();
+                ppt.setLicense(is);
+                OFFICE_PPT_=true;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        	result=false;
+        	throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
+        }finally{
+			if(is!=null) {
 				try {
 					is.close();
-				} catch (IOException e) {
+				}catch(IOException e) {
 					throw new BaseException(e);
 				}
 			}
 		}
-		return result;
-	}
-
-	/**
-	 * @param officePath
-	 * @param OutPutPath
-	 * @throws BaseException
-	 */
-	public static void Excel2Pdf(String officePath, String OutPutPath) throws BaseException {
-		// 楠岃瘉License
-		if (!getLicense(1)) {
-			return;
-		}
-		FileOutputStream fileOS = null;
-		try {
-			File file = new File(OutPutPath);
-			if (!file.exists()) {
-				file.mkdirs();
-			}
-			Workbook wb = new Workbook(officePath);// 鍘熷excel璺緞
-			fileOS = new FileOutputStream(OutPutPath);
-			//wb.save(fileOS, com.aspose.cells.SaveFormat.PDF);
-			PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();
-			pdfSaveOptions.setAllColumnsInOnePagePerSheet(true);
-			wb.save(fileOS, pdfSaveOptions);
-		} catch (Exception e) {
-			throw new BaseException(FileCode.DOC_CONVERT_FALL, e);
-		} finally {
-			if (fileOS != null) {
+        return result;
+    }
+    /**
+     * 
+     * @param officePath
+     * @param OutPutPath
+     * @throws BaseException
+     */
+    public static void Excel2Pdf(String officePath,String OutPutPath)throws BaseException {
+        // 楠岃瘉License
+        if (!getLicense(1)) {
+            return;
+        }
+        FileOutputStream fileOS=null;
+        try {
+            File file = new File(OutPutPath);
+            if (!file.getParentFile().exists()) {
+                file.getParentFile().mkdirs();
+            }
+            Workbook wb = new Workbook(officePath);// 鍘熷excel璺緞
+            fileOS = new FileOutputStream(OutPutPath);
+            //wb.save(fileOS, com.aspose.cells.SaveFormat.PDF);
+            PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();
+            pdfSaveOptions.setAllColumnsInOnePagePerSheet(true);
+            wb.save(fileOS, pdfSaveOptions);
+        } catch (Exception e) {
+        	throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
+        }finally{
+			if(fileOS!=null) {
 				try {
 					fileOS.flush();
 					fileOS.close();
-				} catch (IOException e) {
+				}catch(IOException e) {
 					throw new BaseException(e);
 				}
 			}
 		}
-	}
-
-	public static void Excel2Html(String officePath, String OutPutPath) throws BaseException {
-		// 楠岃瘉License
-		if (!getLicense(1)) {
-			return;
-		}
-		FileOutputStream fileOS = null;
-		try {
-			File file = new File(OutPutPath);
-			if (!file.exists()) {
-				file.mkdirs();
-			}
-			Workbook wb = new Workbook(officePath);// 鍘熷excel璺緞
-			WorksheetCollection sheets = wb.getWorksheets();
-			System.out.println("sheet涓暟锛�" + sheets.getCount());
-			for (int i = 0; i < sheets.getCount(); i++) {
-				setAutoWithHeight(sheets.get(i));
-			}
-			fileOS = new FileOutputStream(OutPutPath);
-			wb.save(fileOS, SaveFormat.HTML);
-		} catch (Exception e) {
-			throw new BaseException(FileCode.DOC_CONVERT_FALL, e);
-		} finally {
-			if (fileOS != null) {
+    }
+    /**
+     * 
+     * @param officePath
+     * @param OutPutPath
+     * @throws BaseException
+     */
+    public static void xls2xlsx(String officePath,String OutPutPath,String officeType)throws BaseException {
+        // 楠岃瘉License
+        if (!getLicense(1)) {
+            return;
+        }
+        if("xlsx".equals(officeType)) {
+        	FileUtil.copyFile(new File(officePath), OutPutPath);
+        	return ;
+        }
+        FileOutputStream fileOS=null;
+        try {
+            File file = new File(OutPutPath);
+            if (!file.getParentFile().exists()) {
+                file.getParentFile().mkdirs();
+            }
+            Workbook wb = new Workbook(officePath);// 鍘熷excel璺緞
+            fileOS = new FileOutputStream(OutPutPath);
+            wb.save(fileOS, com.aspose.cells.SaveFormat.XLSX);
+        } catch (Exception e) {
+        	throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
+        }finally{
+			if(fileOS!=null) {
 				try {
 					fileOS.flush();
 					fileOS.close();
-				} catch (IOException e) {
+				}catch(IOException e) {
 					throw new BaseException(e);
 				}
 			}
 		}
-	}
-
-	/**
-	 * 璁剧疆鍗曞厓鏍肩殑鑷姩閫傚銆侀珮
-	 *
-	 * @param sheet
-	 * @throws Exception
-	 */
-	public static void setAutoWithHeight(Worksheet sheet) throws Exception {
-		Cells cells = sheet.getCells();
-		int columnCount = cells.getMaxColumn();  //鑾峰彇琛ㄩ〉鐨勬渶澶у垪鏁�
-		int rowCount = cells.getMaxRow();        //鑾峰彇琛ㄩ〉鐨勬渶澶ц鏁�
-		if (columnCount < 0 || rowCount < 0) return;
-		for (int col = 0; col < columnCount; col++) {
-			sheet.autoFitColumn(col, 0, rowCount);
-		}
-		for (int row = 0; row < rowCount; row++) {
-			sheet.autoFitRow(row, 0, columnCount);
-		}
-	}
-
-	/**
-	 * @param officePath
-	 * @param OutPutPath
-	 * @throws BaseException
-	 */
-	public static void Word2Pdf(String officePath, String OutPutPath) throws BaseException {
-		// 楠岃瘉License
-		if (!getLicense(2)) {
-			return;
-		}
-		FileOutputStream fileOS = null;
-		try {
-			File file = new File(OutPutPath);
-			if (!file.exists()) {
-				file.mkdirs();
-			}
-			Document doc = new Document(officePath);// 鍘熷word璺緞
-			fileOS = new FileOutputStream(OutPutPath);
-			doc.save(fileOS, com.aspose.words.SaveFormat.PDF);
-		} catch (Exception e) {
-			throw new BaseException(FileCode.DOC_CONVERT_FALL, e);
-		} finally {
-			if (fileOS != null) {
+    }
+    public static void Excel2Html(String officePath,String OutPutPath)throws BaseException {
+        // 楠岃瘉License
+        if (!getLicense(1)) {
+            return;
+        }
+        FileOutputStream fileOS=null;
+        try {
+            File file = new File(OutPutPath);
+            if (!file.getParentFile().exists()) {
+                file.getParentFile().mkdirs();
+            }
+            Workbook wb = new Workbook(officePath);// 鍘熷excel璺緞
+            WorksheetCollection sheets=wb.getWorksheets();
+            System.out.println("sheet涓暟锛�"+sheets.getCount());
+            for(int i=0;i<sheets.getCount();i++) {
+            	//setAutoWithHeight(sheets.get(i));
+            }
+//            HtmlSaveOptions options = new HtmlSaveOptions();
+//            options.setPresentationPreference(true);
+            fileOS = new FileOutputStream(OutPutPath);
+            wb.save(fileOS, com.aspose.cells.SaveFormat.HTML);
+        } catch (Exception e) {
+        	throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
+        }finally{
+			if(fileOS!=null) {
 				try {
 					fileOS.flush();
 					fileOS.close();
-				} catch (IOException e) {
+				}catch(IOException e) {
 					throw new BaseException(e);
 				}
 			}
 		}
-	}
-
-	/**
-	 * @param officePath
-	 * @param OutPutPath
-	 * @throws BaseException
-	 */
-	public static void PPT2Pdf(String officePath, String OutPutPath) throws BaseException {
-		// 楠岃瘉License
-		if (!getLicense(3)) {
-			return;
-		}
-		FileOutputStream fileOS = null;
-		try {
-			File PathFile = new File(OutPutPath);
-			if (!PathFile.exists()) {
-				PathFile.mkdirs();
-			}
-			InputStream slides = new FileInputStream(officePath);// 鍘熷ppt璺緞
-			Presentation pres = new Presentation(slides);
-			fileOS = new FileOutputStream(OutPutPath);
-			pres.save(fileOS, com.aspose.slides.SaveFormat.Pdf);
-		} catch (Exception e) {
-			throw new BaseException(FileCode.DOC_CONVERT_FALL, e);
-		} finally {
-			if (fileOS != null) {
+    }
+    /**
+     * 璁剧疆鍗曞厓鏍肩殑鑷姩閫傚銆侀珮
+     * @param sheet
+     * @throws Exception
+     */
+    public static void setAutoWithHeight(Worksheet sheet)throws Exception
+    {
+        Cells cells =sheet.getCells();
+        int columnCount = cells.getMaxColumn();  //鑾峰彇琛ㄩ〉鐨勬渶澶у垪鏁�
+        int rowCount = cells.getMaxRow();        //鑾峰彇琛ㄩ〉鐨勬渶澶ц鏁�
+        if(columnCount<0 ||rowCount<0 )return ;
+        for (int col = 0; col < columnCount; col++)
+        {
+            sheet.autoFitColumn(col, 0, rowCount);
+        }
+        for (int row = 0; row < rowCount; row++)
+        {
+            sheet.autoFitRow(row, 0, columnCount);
+        }
+    }
+    /**
+     * 
+     * @param officePath
+     * @param OutPutPath
+     * @throws BaseException
+     */
+    public static void Word2Pdf(String officePath,String OutPutPath) throws BaseException {
+        // 楠岃瘉License
+        if (!getLicense(2)) {
+            return;
+        }
+        FileOutputStream fileOS=null;
+        try {
+            File file = new File(OutPutPath);
+            if (!file.getParentFile().exists()) {
+                file.getParentFile().mkdirs();
+            }
+            Document doc = new Document(officePath);// 鍘熷word璺緞
+            fileOS = new FileOutputStream(OutPutPath);
+            doc.save(fileOS, com.aspose.words.SaveFormat.PDF);
+        } catch (Exception e) {
+        	throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
+        }finally{
+			if(fileOS!=null) {
 				try {
 					fileOS.flush();
 					fileOS.close();
-				} catch (IOException e) {
+				}catch(IOException e) {
 					throw new BaseException(e);
 				}
 			}
 		}
-	}
-
-	/**
-	 * 鏂囨。杞崲
-	 *
-	 * @param officePath
-	 * @param outFile
-	 * @return
-	 * @throws BaseException
-	 */
-	public static String OfficeToPdf(String officePath, String outFile, String officeType) throws BaseException {
-
-		SpringMVCContextHolder.getSystemLogger().info("The file of office type:" + officePath);
-		if ("pdf".equals(officeType)) {
-			return outFile;
+    }
+    /**
+     * 
+     * @param officePath
+     * @param OutPutPath
+     * @throws BaseException
+     */
+    public static void PPT2Pdf(String officePath,String OutPutPath)throws BaseException {
+        // 楠岃瘉License
+        if (!getLicense(3)) {
+            return;
+        }
+        FileOutputStream fileOS=null;
+        try {
+            File PathFile = new File(OutPutPath);
+            if (!PathFile.getParentFile().exists()) {
+                PathFile.getParentFile().mkdirs();
+            }
+            InputStream slides = new FileInputStream(officePath);// 鍘熷ppt璺緞
+            Presentation pres = new Presentation(slides);
+            fileOS = new FileOutputStream(OutPutPath);
+            pres.save(fileOS, com.aspose.slides.SaveFormat.Pdf);
+        } catch (Exception e) {
+        	throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
+        }finally{
+			if(fileOS!=null) {
+				try {
+					fileOS.flush();
+					fileOS.close();
+				}catch(IOException e) {
+					throw new BaseException(e);
+				}
+			}
 		}
-		File file = new File(officePath);
-		//鍒ゆ柇褰撳墠office鏂囦欢鏄惁宸茬粡杞负PDF,濡傛灉宸茶浆涓篜DF灏变笉闇�瑕佸啀娆¤浆鎹€��
-		if (file.exists()) {
-			if (officeType.equals("doc") || officeType.equals("docx")) {
-				Word2Pdf(officePath, outFile);
-			} else if (officeType.equals("xls") || officeType.equals("xlsx")) {
+    }
+    /**
+     * 鏂囨。杞崲
+     * @param officePath
+     * @param outFile
+     * @return
+     * @throws BaseException
+     */
+    public static String OfficeToPdf(String officePath,String outFile,String officeType )throws BaseException {
+    	officeType=officeType.toLowerCase();
+        SpringMVCContextHolder.getSystemLogger().info("The file of office type:"+officePath);
+        if("pdf".equals(officeType)) {
+        	return outFile;
+        }
+        File file = new File(officePath);
+        //鍒ゆ柇褰撳墠office鏂囦欢鏄惁宸茬粡杞负PDF,濡傛灉宸茶浆涓篜DF灏变笉闇�瑕佸啀娆¤浆鎹€��
+        if (file.exists()) {
+        	if(officeType.equals("doc")||officeType.equals("docx")){
+                Word2Pdf(officePath,outFile);
+            }else if(officeType.equals("xls")||officeType.equals("xlsx")){
 //                Excel2Pdf(officePath,outFile);
-				Excel2Html(officePath, outFile);
-			} else if (officeType.equals("ppt") || officeType.equals("pptx")) {
-				PPT2Pdf(officePath, outFile);
-			} else {
-				throw new BaseException(FileCode.DOC_CONVERT_NOT_SUPPORT_FILE_FALL);
-			}
-		} else {
-			throw new BaseException(FileCode.DOC_CONVERT_FILE_NOT_EXIST_FALL);
-		}
-		return outFile;
-	}
+                Excel2Html(officePath,outFile);
+//                xls2xlsx(officePath,outFile,officeType);
+            }else if(officeType.equals("ppt")||officeType.equals("pptx")){
+                PPT2Pdf(officePath,outFile);
+            }else{
+            	throw new BaseException(FileCode.DOC_CONVERT_NOT_SUPPORT_FILE_FALL);
+            }
+        } else {
+        	throw new BaseException(FileCode.DOC_CONVERT_FILE_NOT_EXIST_FALL);
+        }
+        return outFile;
+    }
+    /**
+     * 鏂囨。杞崲
+     * @param officePath
+     * @return
+     */
+    public static String OfficeToPdf(String officePath) {
 
-	/**
-	 * 鏂囨。杞崲
-	 *
-	 * @param officePath
-	 * @return
-	 */
-	public static String OfficeToPdf(String officePath) {
+        String[] split = officePath.split("鈱�");
+        int lastIndex = split[0].lastIndexOf(".");
+        int lastNameIndex = split[0].lastIndexOf("/");
 
-		String[] split = officePath.split("鈱�");
-		int lastIndex = split[0].lastIndexOf(".");
-		int lastNameIndex = split[0].lastIndexOf("/");
-
-		String officeType = split[0].substring(lastIndex + 1);
-		String officeName = split[0].substring(lastNameIndex + 1, lastIndex) + ".pdf";
-		String OutPutPath = split[0].substring(0, lastNameIndex + 1) + "office/";
-		System.out.println("杈撳嚭鐩綍锛�" + OutPutPath);
-		File file = new File(split[0]);
-		File pdfFile = new File(OutPutPath + officeName);
-		//鍒ゆ柇褰撳墠office鏂囦欢鏄惁宸茬粡杞负PDF,濡傛灉宸茶浆涓篜DF灏变笉闇�瑕佸啀娆¤浆鎹€��
-		if (pdfFile.exists()) {
-			return OutPutPath + officeName;
-		}
-
-		if (file.exists()) {
-
-			double bytes = file.length();
-			double kilobytes = (bytes / 1024);
-			double megabytes = (kilobytes / 1024);
-
-			DecimalFormat df = new DecimalFormat("0.00");
-			df.setRoundingMode(RoundingMode.HALF_UP);
-			String MB = df.format(megabytes);
-			Double Size = Double.parseDouble(MB);
-			if (Size > 10) {
-				return Size + "MB";
-			}
-			//"doc", "docx", "xls","xlsx", "ppt", "pptx"
-			try {
-				if (officeType.equals("doc") || officeType.equals("docx")) {
-					Word2Pdf(split[0], OutPutPath + "/" + officeName);
-				} else if (officeType.equals("xls") || officeType.equals("xlsx")) {
-					Excel2Pdf(split[0], OutPutPath + "/" + officeName);
-				} else if (officeType.equals("ppt") || officeType.equals("pptx")) {
-					PPT2Pdf(split[0], OutPutPath + "/" + officeName);
-				} else {
-					System.out.println("鏃犳硶璇嗗埆璇ユ枃浠讹紒");
-					return "Error";
-				}
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-		} else {
-			return "NotExists";
-		}
-		return OutPutPath + officeName;
-	}
-
-	/**
-	 * word鏂囨。鐨勫悎骞�
-	 *
-	 * @param targetWordFile
-	 * @param sourceWordFile
-	 * @return
-	 * @throws Exception
-	 */
-	public static File mergeWord(String targetWordFile, String sourceWordFile) throws BaseException {
-		File target = new File(targetWordFile);
-		File source = new File(sourceWordFile);
-		return mergeWord(target, source);
-	}
-
-	public static void main(String args[]) {
-		String file = "E:/work/娌勫磧/FE6.6浜у搧鎶ヤ环宸ュ叿-鏂� - 鍓湰.xlsx";
-		AsposeUtil.OfficeToPdf(file);
-	}
-
-	/**
-	 * word鏂囨。鐨勫悎骞�
-	 *
-	 * @param targetWordFile
-	 * @param sourceWordFile
-	 * @return
-	 * @throws Exception
-	 */
-	public static File mergeWord(File target, File source) throws BaseException {
-
-		if (!target.exists() && !source.exists()) {
-			return null;
-		} else if (!source.exists() && target.exists()) {
-			return target;
-		} else if (source.exists() && !target.exists()) {
-			return source;
-		}
-		// 楠岃瘉License
-		if (!getLicense(2)) {
-			return null;
-		}
-		FileInputStream tin = null;
-		FileInputStream sin = null;
-		FileOutputStream out = null;
-		String temp = target.getParent() + File.separator + "mergeTemp";
-		File temp_target = new File(temp + File.separator + target.getName());
-		try {
-			tin = new FileInputStream(target);
-			sin = new FileInputStream(source);
-			Document targetDoc = new Document(tin);
-			Document sourceDoc = new Document(sin);
-			targetDoc.appendDocument(sourceDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING);
-			File dir = new File(temp);
-			if (!dir.exists()) {
-				dir.mkdirs();
-			}
-			if (temp_target.createNewFile()) {
-				out = new FileOutputStream(temp_target);
+        String officeType = split[0].substring(lastIndex+1);
+        String officeName = split[0].substring(lastNameIndex+1,lastIndex);
+        String OutPutPath = split[0].substring(0,lastNameIndex+1)+"office/";
+        System.out.println("杈撳嚭鐩綍锛�"+OutPutPath);
+        File file = new File(split[0]);
+        //鍒ゆ柇褰撳墠office鏂囦欢鏄惁宸茬粡杞负PDF,濡傛灉宸茶浆涓篜DF灏变笉闇�瑕佸啀娆¤浆鎹€��
+        if (file.exists()) {
+            //"doc", "docx", "xls","xlsx", "ppt", "pptx"
+            try {
+                if(officeType.equals("doc")||officeType.equals("docx")){
+                    Word2Pdf(split[0],OutPutPath+"/"+officeName+".pdf");
+                }else if(officeType.equals("xls")||officeType.equals("xlsx")){
+//                	Excel2Html(split[0],OutPutPath+"/"+officeName+".html");
+                	xls2xlsx(split[0],OutPutPath+"/"+officeName+".xlsx",officeType);
+                }else if(officeType.equals("ppt")||officeType.equals("pptx")){
+                    PPT2Pdf(split[0],OutPutPath+"/"+officeName+".pdf");
+                }else{
+                    System.out.println("鏃犳硶璇嗗埆璇ユ枃浠讹紒");
+                    return "Error";
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        } else {
+            return "NotExists";
+        }
+        return OutPutPath+officeName;
+    }
+    /**
+     * word鏂囨。鐨勫悎骞�
+     * @param targetWordFile
+     * @param sourceWordFile
+     * @return
+     * @throws Exception
+     */
+    public static File mergeWord(String targetWordFile,String sourceWordFile ) throws BaseException{
+    	File target=new File(targetWordFile);
+    	File source=new File(sourceWordFile);
+    	return mergeWord(target,source);
+    }
+    /**
+     * word鏂囨。鐨勫悎骞�
+     * @param
+     * @param
+     * @return
+     * @throws Exception
+     */
+    public static File mergeWord(File target,File source ) throws BaseException{
+    	
+    	if(!target.exists() && !source.exists()) {
+    		return null;
+    	}else if(!source.exists() && target.exists()) {
+    		return target;
+    	}else if(source.exists() && !target.exists()) {
+    		return source;
+    	}
+    	// 楠岃瘉License
+        if (!getLicense(OFFICE_WORD)) {
+            return null;
+        }
+    	FileInputStream tin=null;
+    	FileInputStream sin=null;
+    	FileOutputStream out=null;
+    	String temp=target.getParent()+File.separator+"mergeTemp";
+    	File temp_target=new File(temp+File.separator+target.getName());
+    	try {
+	    	tin=new FileInputStream(target);
+	    	sin=new FileInputStream(source);
+	    	Document targetDoc = new Document(tin);
+	    	Document sourceDoc = new Document(sin); 
+//	    	docBlankProcess(targetDoc);
+	    	targetDoc.appendDocument(sourceDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING);
+//	    	NodeCollection t =sourceDoc.getChildNodes();
+//	    	for(int c=0;c<t.getCount();c++) {
+//	    		targetDoc.getChildNodes().add(t.get(c));
+//	    	}
+	    	File dir=new File(temp);
+	    	if(!dir.exists()) {
+	    		dir.mkdirs();
+	    	}
+	    	if(temp_target.exists()) {
+	    		temp_target.delete();
+	    	}
+	    	if(temp_target.createNewFile()) {
+				out=new FileOutputStream(temp_target);
 				targetDoc.save(out, SaveFormat.DOCX);
 			}
-		} catch (Exception e) {
-			throw new BaseException(FileCode.DOC_MERGE_FALL, e);
-		} finally {
-			try {
-				if (tin != null) {
+    	}catch(Exception e) {
+    		e.printStackTrace();
+    		throw new BaseException(FileCode.DOC_MERGE_FALL,e);
+    	}
+    	finally{
+    		try {
+	    		if(tin!=null) {
 					tin.close();
 				}
-				if (sin != null) {
-					sin.close();
+	    		if(sin!=null) {
+	    			sin.close();
 				}
-				if (out != null) {
+				if(out!=null) {
 					out.flush();
-					out.close();
+	    			out.close();
 				}
-			} catch (IOException e) {
-				throw new BaseException(FileCode.DOC_MERGE_FALL, e);
+    		}catch(IOException e) {
+				throw new BaseException(FileCode.DOC_MERGE_FALL,e);
 			}
 		}
-		return temp_target;
+    	return temp_target;
+    }
+    
+    public static void docBlankProcess(Document targetDoc) {
+    	NodeCollection nodes=targetDoc.getChildNodes(NodeType.PARAGRAPH, true);
+    	System.out.println(nodes.getCount());
+    	List <Node> ss=new ArrayList<>();
+    	for(Paragraph para :(Iterable<Paragraph>) nodes) {
+    		System.out.println("===========================");
+    		System.out.println(para.isEndOfSection());
+    		System.out.println(para.hasChildNodes());
+    		String text=para.getText();
+    		if("\r".equals(text))System.out.println("\\\\r");
+    		else if("\f".equals(text))System.out.println("\\\\f");
+    		else if("".equals(text.trim())) System.out.println("绌烘牸");
+    		else System.out.println(text);
+    		
+    		NodeCollection pnodes =para.getChildNodes();
+    		if(pnodes.getCount()==0)para.appendChild(new Run(targetDoc,"a"));
+    		if(para.isEndOfSection())para.appendChild(new Run(targetDoc,"B"));
+    		System.out.println("sub nodes:"+pnodes.getCount());
+    		for(int i=0;i<pnodes.getCount();i++) {
+    			Node d=pnodes.get(i);
+    			System.out.println("type:"+NodeType.getName(d.getNodeType()));
+    			
+    			if("\r".equals(text))System.out.println("\\\\r");
+        		else if("\f".equals(text))System.out.println("\\\\f");
+        		else if("".equals(text.trim())) System.out.println("绌烘牸");
+        		else System.out.println(text);
+    			if("BOOKMARK_END".equals(NodeType.getName(d.getNodeType()))) {
+    				BookmarkEnd b=(BookmarkEnd)d;
+    			}
+    			if(d.getNodeType()==NodeType.SHAPE) {
+    				ss.add(d);
+    			}
+    		}
+    		
+    		
+    	}
+    	for(Node d:ss) {
+    		d.remove();
+    	}
+    	
+    }
+
+    private static String appendDoc(String sohuyepath, String xuyepath, boolean includeSection) throws Exception {
+        // 楠岃瘉License
+        if (!getLicense(OFFICE_WORD)) {
+            return null ;
+        }
+        Document dstDoc = new Document(sohuyepath);
+        Document srcDoc = new Document(xuyepath);
+        System.out.println("鐩爣鏂囨。椤垫暟锛�"+dstDoc.getPageCount()+" | 婧愭枃妗i〉鏁帮細"+srcDoc.getPageCount());
+        if (includeSection) {
+			Iterator<Section> var3 = srcDoc.getSections().iterator();
+			while (var3.hasNext()) {
+				Section srcSection = (Section) var3.next();
+				Node dstNode = dstDoc.importNode(srcSection, true, 0);
+				dstDoc.appendChild(dstNode);
+			}
+		} else {
+			Node node = dstDoc.getLastSection().getBody().getLastParagraph();
+			if (node == null) {
+				node = new Paragraph(srcDoc);
+				dstDoc.getLastSection().getBody().appendChild(node);
+			}
+
+			if (node.getNodeType() != 8 & node.getNodeType() != 5) {
+				throw new Exception("Use appendDoc(dstDoc, srcDoc, true) instead of appendDoc(dstDoc, srcDoc, false)");
+			}
+
+			insertDocumentAfterNode(node, dstDoc, srcDoc);
+		}
+        File f=new File(sohuyepath);
+        dstDoc.save(f.getParent()+"/merge/"+f.getName());
+        return f.getParent()+"/merge/"+f.getName();
 	}
+
+	private static void insertDocumentAfterNode(Node insertAfterNode, Document mainDoc, Document srcDoc)
+			throws Exception {
+		if (insertAfterNode.getNodeType() != 8 & insertAfterNode.getNodeType() != 5) {
+			throw new Exception("The destination node should be either a paragraph or table.");
+		} else {
+			CompositeNode dstStory = insertAfterNode.getParentNode();
+
+			while (null != srcDoc.getLastSection().getBody().getLastParagraph()
+					&& !srcDoc.getLastSection().getBody().getLastParagraph().hasChildNodes()) {
+				srcDoc.getLastSection().getBody().getLastParagraph().remove();
+			}
+
+			NodeImporter importer = new NodeImporter(srcDoc, mainDoc, 1);
+			int sectCount = srcDoc.getSections().getCount();
+
+			for (int sectIndex = 0; sectIndex < sectCount; ++sectIndex) {
+				Section srcSection = srcDoc.getSections().get(sectIndex);
+				int nodeCount = srcSection.getBody().getChildNodes().getCount();
+
+				for (int nodeIndex = 0; nodeIndex < nodeCount; ++nodeIndex) {
+					Node srcNode = srcSection.getBody().getChildNodes().get(nodeIndex);
+					Node newNode = importer.importNode(srcNode, true);
+					dstStory.insertAfter(newNode, insertAfterNode);
+					insertAfterNode = newNode;
+				}
+			}
+
+		}
+	}
+
+    /**
+     * 鎶婃簮鏂囨。鍐呭鏀惧埌鏈�鍚庝竴椤电殑椤垫湯
+     * @param sohuyepath
+     * @return
+     * @throws Exception
+     */
+    private static void  appendDocToPageTail(String sohuyepath) throws Exception {
+        Document dstDoc = new Document(sohuyepath);
+        int destPages=dstDoc.getPageCount();
+        System.out.println("鍚堝苟鍚堢殑鏈�鍚庢�婚〉鏁帮細"+destPages);
+        Node lastNode=dstDoc.getLastSection().getBody().getLastChild();
+        Paragraph lp=null;
+        if(lastNode.getNodeType()==NodeType.PARAGRAPH){
+            lp=(Paragraph)lastNode;
+            Node ld=lp.getFirstChild();
+            while(ld!=null && ld.getNodeType()!=NodeType.SHAPE && ld.getNodeType()!=NodeType.RUN &&  ld.getNodeType()!=NodeType.TABLE){
+                System.out.println("type name "+NodeType.getName(ld.getNodeType()));
+                ld=ld.getPreviousSibling();
+            }
+        }
+        System.out.println("鏈�鍚庝竴鑺傜偣锛�"+NodeType.getName(lastNode.getNodeType()));
+        for(int i=0;i<40;i++) {
+            Run t = new Run(dstDoc, "======\r");
+            if(lp!=null){
+                lp.insertBefore(t,lp.getLastChild());
+                System.out.println("瀛愬厓绱犳暟锛�"+lp.getChildNodes().getCount());
+            }
+            System.out.println("鍚堝苟鍚堢殑鏈�鍚庢�婚〉鏁帮細"+dstDoc.getPageCount());
+            if(destPages < dstDoc.getPageCount()){
+                System.out.println("================鍒嗛〉=================");
+            }
+        }
+        File ff=new File(sohuyepath);
+        dstDoc.save(ff.getParent()+"/merge/"+ff.getName(),SaveFormat.DOCX);
+    }
+
+    public static void main(String args[]) {
+//    	String file="E:/宸ヤ綔鍐呭.xlsx";
+//    	String file="E:/鐖嗙牬姣嶇嚎.xls";
+//    	String file="E:/閲囬泦鎻愬彇鏃ュ織琛ㄧ粨鏋�.xlsx";
+    	String file="E:/FE淇℃伅绯荤粺鍥戒骇鍖栬В鍐虫柟妗圴1.0.docx";
+//    	AsposeUtil.OfficeToPdf(file);
+    	
+//    	AsposeUtil.mergeWord("E:\\QQ\\浣忔埧鎷呬繚缃崲鍏徃.docx","E:\\QQ\\浣忔埧鎷呬繚缃崲鍏徃2.docx");
+//    	try {
+//    		processDocPage();
+//    	}catch(Exception e) {
+//    		e.printStackTrace();
+//    	}
+    	try {
+//			String sohuyepath="E:/QQ/浣忔埧鎷呬繚缃崲鍏徃.docx";
+//			String xuyepath="E:/QQ/FE淇℃伅绯荤粺鍥戒骇鍖栬В鍐虫柟妗圴1.0.docx";
+//			String npath=appendDoc(sohuyepath, xuyepath, false);
+			String tail="E:/QQ/浣忔埧鎷呬繚缃崲鍏徃2.docx";
+//            appendDoc(npath, tail, false);
+            appendDocToPageTail(tail);
+
+
+		}catch(Exception e) {
+			e.printStackTrace();
+		}
+    }
 }

--
Gitblit v1.9.2