java 使用POI合并两个word文档

网友投稿 358 2022-12-27

java 使用POI合并两个word文档

java POI合并两个word文档

有需要的可以将主函数中写死的地方改为一个List

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import org.apache.poi.openxml4j.opc.OPCPackage;

import org.apache.poi.xwpf.usermodel.XWPFDocument;

import org.apache.poi.xwpf.usermodel.XWPFParagraph;

import org.apache.xmlbeans.XmlOptions;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;

public class MergeDoc {

public static void main (String[] args) throwzAXGapbws Exception {

InputStream in1 = null;

InputStream in2 = null;

OPCPackage src1Package = null;

OPCPackage src2Package = null;

OutputStream dest = new FileOutputStream("dest.docx");

try {

in1 = new FileInputStream("/Users/liuyahui/test.docx");

in2 = new FileInputStream("/Users/liuyahui/test1.docx");

src1Package = OPCPackage.open(in1);

src2Package = OPCPackage.open(in2);

} catch (Exception e) {

e.printStackTrachttp://e();

}

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);

}

private static 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);

}

}

poi生成word --XWPFDocument 合并

//两个对象进行追加

public XWPFDocument mergeWord(XWPFDocument document,XWPFDocument doucDocument2) throws Exception {

XWPFDocument src1Document =document ;

XWPFParagraph p = src1Document.createParagraph();

//设置分页符

p.setPageBreak(true);

CTBody src1Body = src1Document.getDocument().getBody();

XWPFDocument src2Document = doucDocument2;

CTBody src2Body = src2Document.getDocument().getBody();

// XWPFParagraph p2 = src2Document.createParagraph();

XmlOptions optionsOuter = new XmlOptions();

optionsOuter.setSaveOuter();

String appendString = src2Body.xmlText(optionsOuter);

String srcString = src1Body.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);

src1Body.set(makeBody);

return src1Document;

}

无限合并

XWPFDocument xmd=list.get(0); //默认获取第一个作为模板

for (int i=0;i

xmd=mergeWord(xmd,list.get(i+1)); //相继合并

}

xmd=mergeWord(xmd,list.get(i+1)); //相继合并

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信登录网站接口api(微信网站入口)
下一篇:免费数据调用(免费的数据)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~