java 使用POI合并两个word文档
作者:喜码拉雅 时间:2022-09-30 12:22:54
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.O * ackage;
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) throws Exception {
InputStream in1 = null;
InputStream in2 = null;
O * ackage src1Package = null;
O * ackage src2Package = null;
OutputStream dest = new FileOutputStream("dest.docx");
try {
in1 = new FileInputStream("/Users/liuyahui/test.docx");
in2 = new FileInputStream("/Users/liuyahui/test1.docx");
src1Package = O * ackage.open(in1);
src2Package = O * ackage.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);
}
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<list.size()-1;i++) {
xmd=mergeWord(xmd,list.get(i+1)); //相继合并
}
来源:https://blog.csdn.net/qq_37043780/article/details/83623847
标签:java,POI,word
0
投稿
猜你喜欢
C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance)
2023-06-16 07:54:29
C语言运用函数指针数组实现计算器功能
2023-10-01 18:45:25
利用Python+Java调用Shell脚本时的死锁陷阱详解
2023-01-10 13:40:20
Java8深入学习系列(一)lambda表达式介绍
2021-08-20 11:23:19
微信支付H5调用支付详解(java版)
2023-03-10 14:21:44
详解Android自定义View--自定义柱状图
2023-10-13 19:33:06
Java 1.8使用数组实现循环队列
2022-02-11 04:00:10
Mybatis Limit实现分页功能
2022-03-14 13:57:57
Android 接收微信、QQ其他应用打开第三方分享功能
2022-06-12 18:11:58
Android异常 java.lang.IllegalStateException解决方法
2023-07-28 10:26:36
unity实现翻页效果
2022-09-01 17:10:15
Java编程语言特性和优势
2021-11-14 06:54:27
解析android中ProgressBar的用法
2021-07-13 20:38:52
c# 遍历 Dictionary的四种方式
2023-04-17 13:11:10
Android Glide的简单使用
2022-12-22 01:37:14
Android底部导航组件BottomNavigationView
2022-12-02 12:48:05
Java实战之飞翔的小鸟小游戏
2022-10-04 20:37:20
Java class文件格式之属性_动力节点Java学院整理
2021-06-13 01:52:00
详解C# ConcurrentBag的实现原理
2022-11-17 02:26:05
深入理解Java基础之try-with-resource语法糖
2022-12-03 08:17:43