From 4e2dbadb64676b7913ad8bd6f1394b9983e4365c Mon Sep 17 00:00:00 2001
From: 许鹏程 <1821349743@qq.com>
Date: 星期四, 26 九月 2024 10:04:53 +0800
Subject: [PATCH] 底层redis迭代修改不兼容代码

---
 src/main/java/com/product/file/util/AsposeUtil.java |  328 +++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 271 insertions(+), 57 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..25e6f39 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,14 +15,18 @@
 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;
 
@@ -38,20 +43,26 @@
 		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);
+			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_) {
+				//鍒ゆ柇鏍硅矾寰勬槸鍚︿负web妯″潡
 
-			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;
+				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 {
@@ -79,8 +90,8 @@
 		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璺緞
 			fileOS = new FileOutputStream(OutPutPath);
@@ -88,6 +99,43 @@
 			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) {
+					throw new BaseException(e);
+				}
+			}
+		}
+	}
+
+	/**
+	 * @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 {
@@ -110,17 +158,19 @@
 		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璺緞
 			WorksheetCollection sheets = wb.getWorksheets();
 			System.out.println("sheet涓暟锛�" + sheets.getCount());
 			for (int i = 0; i < sheets.getCount(); i++) {
-				setAutoWithHeight(sheets.get(i));
+				//setAutoWithHeight(sheets.get(i));
 			}
+//            HtmlSaveOptions options = new HtmlSaveOptions();
+//            options.setPresentationPreference(true);
 			fileOS = new FileOutputStream(OutPutPath);
-			wb.save(fileOS, SaveFormat.HTML);
+			wb.save(fileOS, com.aspose.cells.SaveFormat.HTML);
 		} catch (Exception e) {
 			throw new BaseException(FileCode.DOC_CONVERT_FALL, e);
 		} finally {
@@ -167,11 +217,13 @@
 		FileOutputStream fileOS = null;
 		try {
 			File file = new File(OutPutPath);
-			if (!file.exists()) {
-				file.mkdirs();
+			if (!file.getParentFile().exists()) {
+				file.getParentFile().mkdirs();
 			}
 			Document doc = new Document(officePath);// 鍘熷word璺緞
 			fileOS = new FileOutputStream(OutPutPath);
+			//涓嶄繚鐣欎慨璁㈢棔杩�
+			doc.acceptAllRevisions();
 			doc.save(fileOS, com.aspose.words.SaveFormat.PDF);
 		} catch (Exception e) {
 			throw new BaseException(FileCode.DOC_CONVERT_FALL, e);
@@ -200,8 +252,8 @@
 		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(officePath);// 鍘熷ppt璺緞
 			Presentation pres = new Presentation(slides);
@@ -230,7 +282,7 @@
 	 * @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;
@@ -243,6 +295,7 @@
 			} else if (officeType.equals("xls") || officeType.equals("xlsx")) {
 //                Excel2Pdf(officePath,outFile);
 				Excel2Html(officePath, outFile);
+//                xls2xlsx(officePath,outFile,officeType);
 			} else if (officeType.equals("ppt") || officeType.equals("pptx")) {
 				PPT2Pdf(officePath, outFile);
 			} else {
@@ -267,37 +320,21 @@
 		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";
@@ -325,16 +362,11 @@
 		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
+	 * @param
+	 * @param
 	 * @return
 	 * @throws Exception
 	 */
@@ -348,7 +380,7 @@
 			return source;
 		}
 		// 楠岃瘉License
-		if (!getLicense(2)) {
+		if (!getLicense(OFFICE_WORD)) {
 			return null;
 		}
 		FileInputStream tin = null;
@@ -361,16 +393,25 @@
 			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) {
+			e.printStackTrace();
 			throw new BaseException(FileCode.DOC_MERGE_FALL, e);
 		} finally {
 			try {
@@ -390,4 +431,177 @@
 		}
 		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();
+		}
+
+	}
+
+	public static File appendDoc(File source, File target) throws Exception {
+		return new File(appendDoc(source.getPath(), target.getPath(), false));
+	}
+
+	public 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