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