From d873c581e95fdabe4f1a32d95e283a1e1c20c980 Mon Sep 17 00:00:00 2001
From: shichongfu <shi_chongfu@163.com>
Date: 星期四, 15 六月 2023 14:42:40 +0800
Subject: [PATCH] 文档处理

---
 src/main/java/com/product/file/util/AsposeUtil.java |  316 ++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 257 insertions(+), 59 deletions(-)

diff --git a/src/main/java/com/product/file/util/AsposeUtil.java b/src/main/java/com/product/file/util/AsposeUtil.java
index 152695e..15ae32d 100644
--- a/src/main/java/com/product/file/util/AsposeUtil.java
+++ b/src/main/java/com/product/file/util/AsposeUtil.java
@@ -8,12 +8,24 @@
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
 
+import com.aspose.cells.Cells;
+import com.aspose.cells.HtmlSaveOptions;
 import com.aspose.cells.PdfSaveOptions;
 import com.aspose.cells.Workbook;
+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.NodeCollection;
+import com.aspose.words.NodeType;
+import com.aspose.words.Paragraph;
+import com.aspose.words.SaveFormat;
+import com.aspose.words.Section;
+import com.aspose.words.SectionStart;
 import com.product.core.exception.BaseException;
 import com.product.core.spring.context.SpringMVCContextHolder;
+import com.product.file.config.FileCode;
 
 public class AsposeUtil {
 	//鏄惁鍒濆浜唋icense
@@ -45,7 +57,7 @@
             isInitLicense=true;
         } catch (Exception e) {
         	result=false;
-        	throw new BaseException(e);
+        	throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
         }finally{
 			if(is!=null) {
 				try {
@@ -71,18 +83,17 @@
         FileOutputStream fileOS=null;
         try {
             File file = new File(OutPutPath);
-            if (!file.exists()) {
-                file.mkdirs();
+            if (!file.getParentFile().exists()) {
+                file.getParentFile().mkdirs();
             }
             Workbook wb = new Workbook(officePath);// 鍘熷excel璺緞
-            File pdfFile = new File(OutPutPath);// 杈撳嚭璺緞
-            fileOS = new FileOutputStream(pdfFile);
+            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(e);
+        	throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
         }finally{
 			if(fileOS!=null) {
 				try {
@@ -93,6 +104,97 @@
 				}
 			}
 		}
+    }
+    /**
+     * 
+     * @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) {
+					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.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) {
+					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);
+        }
     }
     /**
      * 
@@ -112,11 +214,10 @@
                 file.getParentFile().mkdirs();
             }
             Document doc = new Document(officePath);// 鍘熷word璺緞
-            File pdfFile = new File(OutPutPath);// 杈撳嚭璺緞
-            fileOS = new FileOutputStream(pdfFile);
+            fileOS = new FileOutputStream(OutPutPath);
             doc.save(fileOS, com.aspose.words.SaveFormat.PDF);
         } catch (Exception e) {
-        	throw new BaseException(e);
+        	throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
         }finally{
 			if(fileOS!=null) {
 				try {
@@ -142,18 +243,15 @@
         FileOutputStream fileOS=null;
         try {
             File PathFile = new File(OutPutPath);
-            if (!PathFile.exists()) {
-                PathFile.mkdirs();
+            if (!PathFile.getParentFile().exists()) {
+                PathFile.getParentFile().mkdirs();
             }
-            InputStream slides = new FileInputStream(new File(officePath));// 鍘熷ppt璺緞
+            InputStream slides = new FileInputStream(officePath);// 鍘熷ppt璺緞
             Presentation pres = new Presentation(slides);
-            File file = new File(OutPutPath);// 杈撳嚭pdf璺緞
-            fileOS = new FileOutputStream(file);
+            fileOS = new FileOutputStream(OutPutPath);
             pres.save(fileOS, com.aspose.slides.SaveFormat.Pdf);
-            fileOS.flush();
-            fileOS.close();
         } catch (Exception e) {
-        	throw new BaseException(e);
+        	throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
         }finally{
 			if(fileOS!=null) {
 				try {
@@ -173,35 +271,27 @@
      * @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);
-        SpringMVCContextHolder.getSystemLogger().info("The file of PDF type:"+outFile);
+        if("pdf".equals(officeType)) {
+        	return outFile;
+        }
         File file = new File(officePath);
         //鍒ゆ柇褰撳墠office鏂囦欢鏄惁宸茬粡杞负PDF,濡傛灉宸茶浆涓篜DF灏变笉闇�瑕佸啀娆¤浆鎹€��
-        if (file.exists()&& !"pdf".equals(officeType)) {
-            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){
-            SpringMVCContextHolder.getSystemLogger().info("The file size:"+Size+"MB");
-//            }
-            //"doc", "docx", "xls","xlsx", "ppt", "pptx"
-            if(officeType.equals("doc")||officeType.equals("docx")){
+        if (file.exists()) {
+        	if(officeType.equals("doc")||officeType.equals("docx")){
                 Word2Pdf(officePath,outFile);
             }else if(officeType.equals("xls")||officeType.equals("xlsx")){
-                Excel2Pdf(officePath,outFile);
+//                Excel2Pdf(officePath,outFile);
+//                Excel2Html(officePath,outFile);
+                xls2xlsx(officePath,outFile,officeType);
             }else if(officeType.equals("ppt")||officeType.equals("pptx")){
                 PPT2Pdf(officePath,outFile);
             }else{
-            	SpringMVCContextHolder.getSystemLogger().info("File types that cannot be converted:"+officeType);
+            	throw new BaseException(FileCode.DOC_CONVERT_NOT_SUPPORT_FILE_FALL);
             }
         } else {
-        	SpringMVCContextHolder.getSystemLogger().info("File Not Exist");
+        	throw new BaseException(FileCode.DOC_CONVERT_FILE_NOT_EXIST_FALL);
         }
         return outFile;
     }
@@ -212,43 +302,26 @@
      */
     public static String OfficeToPdf(String officePath) {
 
-        //G:/product/WebApp/fwis_develop/com/is/flywings/oa/attchfile/1000000000/i0002/101951.docx鈱�101951.docx鈱抐eiyu.docx
         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 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]);
-        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);
+                    Word2Pdf(split[0],OutPutPath+"/"+officeName+".pdf");
                 }else if(officeType.equals("xls")||officeType.equals("xlsx")){
-                    Excel2Pdf(split[0],OutPutPath+"/"+officeName);
+//                	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);
+                    PPT2Pdf(split[0],OutPutPath+"/"+officeName+".pdf");
                 }else{
                     System.out.println("鏃犳硶璇嗗埆璇ユ枃浠讹紒");
                     return "Error";
@@ -261,9 +334,134 @@
         }
         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 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); 
+	    	docBlankProcess(targetDoc);
+	    	targetDoc.appendDocument(sourceDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING);
+	    	
+  
+//	    	for(Section sect : targetDoc.getSections())
+//	    	{
+//	    	    if (sect.getBody().getParagraphs().getCount() == 0) {
+//	    	        sect.remove();
+//	    	    }
+//	    	}
+	    	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) {
+					tin.close();
+				}
+	    		if(sin!=null) {
+	    			sin.close();
+				}
+				if(out!=null) {
+					out.flush();
+	    			out.close();
+				}
+    		}catch(IOException e) {
+				throw new BaseException(FileCode.DOC_MERGE_FALL,e);
+			}
+		}
+    	return temp_target;
+    }
     
+    public static void docBlankProcess(Document targetDoc) {
+    	NodeCollection nodes=targetDoc.getChildNodes(NodeType.PARAGRAPH, true);
+    	System.out.println(nodes.getCount());
+    	for(Paragraph para :(Iterable<Paragraph>) nodes) {
+    		String text=para.getText();
+    		if("\r".equals(text)) {
+    			System.out.println("rrrrrrrrrrrr");
+    		}else if("\f".equals(text)) {
+    			System.out.println("ffffffffffff");
+    		}else {
+    			System.out.println(text);
+    		}
+    		if ("\r".equals(text) 
+    				//|| "\f".equals(text) 
+    				) {
+    			para.remove();
+    		}
+    	}
+    }
+    public static void docProcess(Document targetDoc) {
+    	NodeCollection nodes=targetDoc.getChildNodes();
+    	for(Paragraph para :(Iterable<Paragraph>) nodes) {
+    		String text=para.getText();
+    		if("\r".equals(text)) {
+    			System.out.println("rrrrrrrrrrrr");
+    		}else if("\f".equals(text)) {
+    			System.out.println("ffffffffffff");
+    		}else {
+    			System.out.println(text);
+    		}
+    		if ("\r".equals(text) 
+    				//|| "\f".equals(text) 
+    				) {
+    			para.remove();
+    		}
+    	}
+    }
     public static void main(String args[]) {
-    	String file="E:/work/娌勫磧/FE6.6浜у搧鎶ヤ环宸ュ叿-鏂� - 鍓湰.xlsx";
+    	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");
     }
 }

--
Gitblit v1.9.2