最近项目需要做word文档导出,poi提供了相同模板合并的功能,但是项目中有几个不同的模板。所以决定直接生成单个word然后遍历合并。合并代码如下(新手代码,轻喷。。)
/**
* 合并两个文档到新的文件
* @param outfile 输出文件
* @param file1 要合并的文件1
* @param file2 要合并的文件2
* @throws Exception
*/
private void appenddoc(String outfile,String file1,String file2) throws Exception {
InputStream in1 = null;
InputStream in2 = null;
OPCPackage src1Package = null;
OPCPackage src2Package = null;
OutputStream dest = new FileOutputStream(outfile);
try {
in1 = new FileInputStream(file1);
in2 = new FileInputStream(file2);
src1Package = OPCPackage.open(in1);
src2Package = OPCPackage.open(in2);
} catch (Exception e) {
e.printStackTrace();
}
XWPFDocument src1Document = new XWPFDocument(src1Package);
CTBody src1Body = src1Document.getDocument().getBody();
XWPFParagraph p = src1Document.createParagraph();
//设置分页符
p.setPageBreak(true);
XWPFDocument src2Document = new XWPFDocument(src2Package);
CTBody src2Body = src2Document.getDocument().getBody();
appendBody(src1Body, src2Body);
src1Document.write(dest);
src1Document.close();
src2Document.close();
in1.close();
in2.close();
dest.close();
}
private void appendBody(CTBody src, CTBody append) throws Exception {
XmlOptions optionsOuter = new XmlOptions();
optionsOuter.setSaveOuter();
String appendString = append.xmlText(optionsOuter);
String srcString = src.xmlText();
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);
}