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; import org.apache.xmlbeans.XmlOptions; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody; import java.io.*; import java.util.ArrayList; import java.util.List; /** * 合并word */ public class MergeDoc { /** * 合并docx文件 * * @param srcDocxs 需要合并的目标docx文件 * @param response 合并后的docx输出文件 */ public static File mergeDoc(List 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文件中得空行标签 // appendString = appendString.replaceAll("",""); // appendString = appendString.replaceAll("",""); // appendString = appendString.replaceAll("",""); // appendString = appendString.replaceAll("","");; String srcString = src.xmlText(); // srcString = srcString.replaceAll("",""); // srcString = srcString.replaceAll("",""); // srcString = srcString.replaceAll("",""); // srcString = srcString.replaceAll("",""); 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); } }