poi 实现合井word文档 兼容图片的合井_第1页
poi 实现合井word文档 兼容图片的合井_第2页
poi 实现合井word文档 兼容图片的合井_第3页
poi 实现合井word文档 兼容图片的合井_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论