下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
poi实现合井word文档,兼容图片的合井
问题
这两天一直在找java合并wrod的实现方法,找到了一个不错的文章,copy代码试验
了一翻,的确是可以实现合并的word的效果的,但是有一个致命的缺陷,word里的图片
没办法正确的合并到目标文件。
解决
研究了大半天,终千找到了解决方案。上面的合并word原理是,将word文档的内容
转换为xml字符串,然后把耍合并文档的xml进行拼接,生成新的文档。之所以图片无法
合并是因为xml里只保存了图片的基本信息及ID,但没有保存图片的具体二进制数据,所
以解决思路就是如何将文档中的图片合并到目标word之中。千是我对原来合并的代码进行
了改造,实现了我想要的效果
直接上代码,不能说很巧妙,但是至少解决了问题。
Java代码佥
1.importjava.io.FileinputStream;
2.importjava.io.FileOutputStream;
3.importjava.io.InputStream;
4.importjava.io.OutputStream;
5.importjava.util.HashMap;
6.importjava.util.List;
7.importjava.util.Map;
8.
9.importorg.apache.poi.openxml4j.ope.OPCPackage;
10.importorg.apache.poi.xwpf.usermodel.Document;
11.importorg.apache.poi.xwpf.usermodel.XWPFDocument;
12.importorg.apache.poi.xwpf.usermodel.XWPFPictureData;
13.importorg.apache.xmlbeans.XmlOptions;
14.importorg.openxmlformats.schemas.wordprocessingml.x2006.main.CTB
ody;
15./**
16.*@author:Max
17.*
18.*@Date:2018/6/8
19.*
20.*@name:多个word文件合并,采用poi实现,兼容图片的迁移
21.*
22.*@Description:
23.*/
24.publicclassMergeDoc{
25.
26.
27.publicstaticvoidmain(String[]args)throw
sException{
28.InputStreaminl=null;
29.InputStreamin2=null;
30.InputStreamin3=null;
31.OPCPackagesrclPackage=null;
32.OPCPackagesrc2Package=null;
33.OPCPackagesrc3Package=null;
34.OutputStreamdest=newFileOutputStream("d:\\merge.docx
II);
35.try{
36.inl=newFilelnputStream("my/word/图片表格测试栈板.doc
XII);
37.in2=newFileinputStream("my/word/图片.docx");
38.in3=newFileinputStream("my/word/图片.docx");
39.srclPackage=OPCPackage.open(inl);
40.src2Package=OPCPackage.open(in2);
41.src3Package=OPCPackage.open(in3);
42.}catch(Exceptione){
43.e.printStackTrace();
44.}
45.
46.XWPFDocumentsrclDocument=newXWPFDocument(srclPackag
e);
47.XWPFDocumentsrc2Document=newXWPFDocument(src2Packag
e);
48.XWPFDocumentsrc3Document=newXWPFDocument(src2Packag
e);
49.
so.appendBody(srclDocument,src2Document);
51.appendBody(srclDocument,src3Document);
52.
53.srclDocument.write(dest);
54.
55.
56.}
57.
58.publicstaticvoidappendBody(XWPFDocumentsrc,XWPFDocumen
tappend)throwsException{
59.CTBodysrc1Body=src.getDocument().getBody(www.267774.co
m);
60.CTBodysrc2Body=append.getDocument().getBody();
61.
62.List<XWPFPictureData>allPictures=append.getAllPictures
();
63.//记录图片合并前及合并后的ID
64.Map<String,String>map=newHashMap();
65.for(XWPFPictureDatapicture:allPictures){
66.Stringbefore=append.getRelationid(picture);
67.//将原文档中的图片加入到目标义档中
68.Stringafter=src.addPictureData(picture.getData
(),Document.PICTURE_TYPE_PNG);
69.map.put(before,after);
70.}
71.
72.appendBody(srclBody,src2Body,map);
73.
}
74.
75.
76.privatestaticvoidappendBody(CTBodysrc,CTBodyappend,Map<
String,String>map)throwsException{
77.XmlOptionsoptionsOuter=newXmlOptions(www.rodlg.co
m);
78.optionsOuter.setSaveOuter();
79.StringappendString=append.xmlText(optionsOuter);
80.
81.StringsrcString=src.xmlText();
82.Stringprefix=srcString.substring(0,srcString.indexOf
(">")+l);
83.StringmainPart=srcString.substring(srcString.indexOf
(">")+1,srcString.lastindexOf("<"));
84.Stringsufix=srcString.substring(srcString.lastindexOf
("<"));
85.StringaddPart=appendString.substring(appendString.inde
xof(">")+1,appendString.lastindexOf("<"));
86.
87.if(map!=null&&!map.isEmpty()){
88.//对xml字符串中图片ID进行替换
89.for(Map.Entry<String,String>set:map.entrySet
()){
90.addPart=addPart.replace(set.getKey(),s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 采供血机构可持续发展与环境保护考核试卷
- 纸板容器回收利用产业链考核试卷
- 乡村旅游营销策略概述分析
- 搪瓷卫生洁具生产中的环境保护措施考核试卷
- 旅游景区技术创新分析
- 船舶结构与轮渡运输稳定性保障考核试卷
- 纺织企业财务管理与成本控制考核试卷
- 刀具和刀片用磨刀轮项目可行性实施报告
- 便携秤相关项目实施方案
- 便携式婴儿床市场环境与对策分析
- GB/T 44533.3-2024冲模球锁紧凸模固定板第3部分:E型重载简易型
- 手机入股合同范本
- 电动汽车充电设施及场站测试评价规范第3部分:场站服务能力
- 工商管理大类的课程设计
- 2024年高考数学试卷(北京)(空白卷)
- 2024年大学生信息素养大赛(校赛)培训考试题库(含答案)
- 2024天津卫生局事业单位公开招聘1660名工作人员历年高频500题难、易错点模拟试题附带答案详解
- 数学苏教版六年级(上册)比的意义(课件)
- 寺庙资金管理制度
- 基于人工智能的智能制造升级改造方案
- TLFPA 004-2024 全氟己酮灭火系统技术规范
评论
0/150
提交评论