From 28640fa008701e22fe1d1c54c31690d150914d4b Mon Sep 17 00:00:00 2001 From: 许鹏程 <1821349743@qq.com> Date: 星期二, 16 七月 2024 18:36:29 +0800 Subject: [PATCH] 套红文档合并 --- src/main/java/com/product/file/service/MergeDoc.java | 125 ++++++++++++++--------------------------- 1 files changed, 44 insertions(+), 81 deletions(-) diff --git a/src/main/java/com/product/file/service/MergeDoc.java b/src/main/java/com/product/file/service/MergeDoc.java index 9b27d65..58343ea 100644 --- a/src/main/java/com/product/file/service/MergeDoc.java +++ b/src/main/java/com/product/file/service/MergeDoc.java @@ -1,5 +1,8 @@ package com.product.file.service; +import cn.hutool.core.io.FileUtil; +import com.product.file.util.AsposeUtil; +import com.product.file.util.FileUtils; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.tomcat.util.http.fileupload.IOUtils; @@ -15,96 +18,56 @@ */ public class MergeDoc { - /** - * 鍚堝苟docx鏂囦欢 - * - * @param srcDocxs 闇�瑕佸悎骞剁殑鐩爣docx鏂囦欢 - * @param response 鍚堝苟鍚庣殑docx杈撳嚭鏂囦欢 - */ - public static File mergeDoc(List<File> srcDocxs, String tempFilePath) { - OutputStream dest = null; - List<OPCPackage> opcpList = new ArrayList<>(); - int length = null == srcDocxs ? 0 : srcDocxs.size(); - /** - * 寰幆鑾峰彇姣忎釜docx鏂囦欢鐨凮PCPackage瀵硅薄 - */ - for (int i = 0; i < length; i++) { - File doc = srcDocxs.get(i); - OPCPackage srcPackage = null; - try { - srcPackage = OPCPackage.open(doc); - } catch (Exception e) { - e.printStackTrace(); - } - if (null != srcPackage) { - opcpList.add(srcPackage); - } - } - int opcpSize = opcpList.size(); - //鑾峰彇鐨凮PCPackage瀵硅薄澶т簬0鏃讹紝鎵ц鍚堝苟鎿嶄綔 - if (opcpSize > 0) { - try { - dest = new FileOutputStream(tempFilePath); - XWPFDocument src1Document = new XWPFDocument(opcpList.get(0)); - CTBody src1Body = src1Document.getDocument().getBody(); - //OPCPackage澶т簬1鐨勯儴鍒嗘墽琛屽悎骞舵搷浣� - if (opcpSize > 1) { - for (int i = 1; i < opcpSize; i++) { - OPCPackage src2Package = opcpList.get(i); - XWPFDocument src2Document = new XWPFDocument(src2Package); - CTBody src2Body = src2Document.getDocument().getBody(); - appendBody(src1Body, src2Body); - } - } - //灏嗗悎骞剁殑鏂囨。鍐欏叆鐩爣鏂囦欢涓� - src1Document.write(dest); - return new File(tempFilePath); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } finally { - //鍏抽棴娴� - IOUtils.closeQuietly(dest); - } - } - return null; - } + /** + * 鍚堝苟docx鏂囦欢 + * + * @param srcDocxs 闇�瑕佸悎骞剁殑鐩爣docx鏂囦欢 + * @param response 鍚堝苟鍚庣殑docx杈撳嚭鏂囦欢 + */ + public static File mergeDoc(List<File> srcDocxs, String tempFilePath) { + if (srcDocxs.size() > 1) { + File file = srcDocxs.get(0); + for (int i = 1; i < srcDocxs.size(); i++) { + file = AsposeUtil.mergeWord(file, srcDocxs.get(i)); + } + FileUtil.copyFile(file, new File(tempFilePath)); + FileUtil.del(file); + } + return null; + } - /** - * 鍚堝苟鏂囨。鍐呭 - * - * @param src 鐩爣鏂囨。 - * @param append 瑕佸悎骞剁殑鏂囨。 - * @throws Exception - */ - private static void appendBody(CTBody src, CTBody append) throws Exception { - XmlOptions optionsOuter = new XmlOptions(); - optionsOuter.setSaveOuter(); - String appendString = append.xmlText(optionsOuter); - //鏇挎崲word涓緱绌鸿銆佹牴鎹嚜宸遍渶姹傛潵閫夋嫨闇�涓嶉渶瑕� - //word鏂囨。鍏跺疄鏄敱xml鏂囦欢鍚堟垚寰楋紝涓�涓嬫浛鎹㈠緱鏄綔鑰呭搴斿緱xml鏂囦欢涓緱绌鸿鏍囩 + /** + * 鍚堝苟鏂囨。鍐呭 + * + * @param src 鐩爣鏂囨。 + * @param append 瑕佸悎骞剁殑鏂囨。 + * @throws Exception + */ + private static void appendBody(CTBody src, CTBody append) throws Exception { + XmlOptions optionsOuter = new XmlOptions(); + optionsOuter.setSaveOuter(); + String appendString = append.xmlText(optionsOuter); + //鏇挎崲word涓緱绌鸿銆佹牴鎹嚜宸遍渶姹傛潵閫夋嫨闇�涓嶉渶瑕� + //word鏂囨。鍏跺疄鏄敱xml鏂囦欢鍚堟垚寰楋紝涓�涓嬫浛鎹㈠緱鏄綔鑰呭搴斿緱xml鏂囦欢涓緱绌鸿鏍囩 // appendString = appendString.replaceAll("<w:p><w:pPr><w:spacing w:line=\\\"360\\\" w:lineRule=\\\"auto\\\"/><w:jc w:val=\\\"right\\\"/><w:rPr><w:rFonts w:ascii=\\\"浠垮畫\\\" w:eastAsia=\\\"浠垮畫\\\" w:hAnsi=\\\"浠垮畫\\\"/><w:sz w:val=\\\"24\\\"/></w:rPr></w:pPr></w:p>",""); // appendString = appendString.replaceAll("<w:p><w:pPr xsi:nil=\\\"true\\\" xmlns:xsi=\\\"xsi\\\"/></w:p>",""); // appendString = appendString.replaceAll("<w:p><w:pPr><w:ind w:firstLineChars=\\\"200\\\" w:firstLine=\\\"600\\\"/><w:jc w:val=\\\"right\\\"/><w:rPr><w:rFonts w:ascii=\\\"浠垮畫\\\" w:eastAsia=\\\"浠垮畫\\\" w:hAnsi=\\\"浠垮畫\\\"/><w:sz w:val=\\\"30\\\"/><w:szCs w:val=\\\"30\\\"/></w:rPr></w:pPr></w:p>",""); // appendString = appendString.replaceAll("<w:spacing w:line=\\\"360\\\" w:lineRule=\\\"auto\\\"/>","");; - String srcString = src.xmlText(); + String srcString = src.xmlText(); // srcString = srcString.replaceAll("<w:p><w:pPr><w:ind w:firstLineChars=\\\"200\\\" w:firstLine=\\\"600\\\"/><w:jc w:val=\\\"right\\\"/><w:rPr><w:rFonts w:ascii=\\\"浠垮畫\\\" w:eastAsia=\\\"浠垮畫\\\" w:hAnsi=\\\"浠垮畫\\\"/><w:sz w:val=\\\"30\\\"/><w:szCs w:val=\\\"30\\\"/></w:rPr></w:pPr></w:p>",""); // srcString = srcString.replaceAll("<w:spacing w:line=\\\"360\\\" w:lineRule=\\\"auto\\\"/>",""); // srcString = srcString.replaceAll("<w:p><w:pPr><w:spacing w:line=\\\"360\\\" w:lineRule=\\\"auto\\\"/><w:jc w:val=\\\"right\\\"/><w:rPr><w:rFonts w:ascii=\\\"浠垮畫\\\" w:eastAsia=\\\"浠垮畫\\\" w:hAnsi=\\\"浠垮畫\\\"/><w:sz w:val=\\\"24\\\"/></w:rPr></w:pPr></w:p>",""); // srcString = srcString.replaceAll("<w:p><w:pPr xsi:nil=\\\"true\\\" xmlns:xsi=\\\"xsi\\\"/></w:p>",""); - String prefix = srcString.substring(0, srcString.indexOf(">") + 1); - String mainPart = srcString.substring(srcString.indexOf(">") + 1, - srcString.lastIndexOf("<")); - String sufix = srcString.substring(srcString.lastIndexOf("<")); - String addPart = appendString.substring(appendString.indexOf(">") + 1, - appendString.lastIndexOf("<")); - CTBody makeBody = CTBody.Factory.parse(prefix + mainPart + addPart - + sufix); - src.set(makeBody); - } + String prefix = srcString.substring(0, srcString.indexOf(">") + 1); + String mainPart = srcString.substring(srcString.indexOf(">") + 1, + srcString.lastIndexOf("<")); + String sufix = srcString.substring(srcString.lastIndexOf("<")); + String addPart = appendString.substring(appendString.indexOf(">") + 1, + appendString.lastIndexOf("<")); + CTBody makeBody = CTBody.Factory.parse(prefix + mainPart + addPart + + sufix); + src.set(makeBody); + } } -- Gitblit v1.9.2