package com.product.file.service; import cn.hutool.core.io.FileUtil; import com.product.file.util.MergeWordDocuments; import org.apache.xmlbeans.XmlOptions; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody; import java.io.*; import java.util.List; /** * 鍚堝苟word */ public class MergeDoc { /** * 鍚堝苟docx鏂囦欢 * * @param srcDocxs 闇€瑕佸悎骞剁殑鐩爣docx鏂囦欢 * @param response 鍚堝苟鍚庣殑docx杈撳嚭鏂囦欢 */ public static File mergeDoc(List<File> srcDocxs, String tempFilePath) throws Exception { File file = null; if (srcDocxs.size() > 1) { file = srcDocxs.get(0); for (int i = 1; i < srcDocxs.size(); i++) { file = MergeWordDocuments.mergeFile(file, srcDocxs.get(i)); } File file1 = new File(tempFilePath); FileUtil.copyFile(file, file1); FileUtil.del(file); return file1; } return file; } /** * 鍚堝苟鏂囨。鍐呭 * * @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(); // 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); } }