import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import com.aspose.words.CompositeNode;
import com.aspose.words.Document;
import com.aspose.words.Node;
import com.aspose.words.NodeImporter;
import com.aspose.words.Paragraph;
import com.aspose.words.Section;
public class WordUtil {
/**
* 合并word文档
* @param mouldFilePath 模板文件(源文件)
* @param mergeFilePath 带拼接文件(目标文件)
* @param newFilePath 最终文件
*/
public static void mergeWord(String mouldFilePath, String mergeFilePath, String newFilePath) {
try {
// 加载第一个文档(模板)
Document document1 = new Document(mouldFilePath);
// 加载第二个文档(待合并的文档)
Document document2 = new Document(mergeFilePath);
appendDoc(document1, document2);
document1.save(newFilePath);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void appendDoc(Document dstDoc, Document srcDoc) throws Exception {
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 RuntimeException("Use appendDoc(dstDoc, srcDoc, true) instead of appendDoc(dstDoc, srcDoc, false)");
}
insertDocumentAfterNode(node, dstDoc, srcDoc);
}
private static void insertDocumentAfterNode(Node insertAfterNode, Document mainDoc, Document srcDoc)
throws Exception {
if (insertAfterNode.getNodeType() != 8 & insertAfterNode.getNodeType() != 5) {
throw new RuntimeException("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;
}
}
}
}
// 替换文本
public static void replaceText(String oldFilePath, String newFilePath, Map<String, String> map) {
try {
// 加载Word文档
Document document = new Document(oldFilePath);
Iterator<Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Entry<String, String> next = it.next();
String key = next.getKey();
String value = next.getValue();
// 使用新文本替换文档中的指定文本
document.getRange().replace(key, value, false,false);
}
// 保存文档
document.save(newFilePath);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 替换word文件内容
*
* @param telegramSend
*/
public static void replaceWordText(String templateDocx, String realDocx, TelegramSend telegramSend) {
Map<String, String> docMap = new HashMap<>();
docMap.put("{1}", telegramSend.getFromDept());
docMap.put("{2}", telegramSend.getSendTypeName());
docMap.put("{3}", telegramSend.getGradeName());
docMap.put("{5}", telegramSend.getSendCode());
docMap.put("{6}", telegramSend.getCopytoNote());
docMap.put("{7}", String.valueOf(telegramSend.getCopies()));
docMap.put("{8}", telegramSend.getTitle());
docMap.put("{11}", DateUtil.getDateCNMinte(telegramSend.getSendTime()));
docMap.put("{12}", String.valueOf(telegramSend.getCopies()));
WordUtil.replaceText(templateDocx, realDocx, docMap);
}
public static void main(String[] args) {
String mbFilePath = "AAA.doc";
String newmbFilePath = "BBB.docx";
String newFilePath = "CCC.docx";
// replaceText(mbFilePath,newmbFilePath,docMap);
mergeWord(newmbFilePath,mbFilePath,newFilePath);
System.out.println("ok");
}
}