poi对word2003或者2007的图片读取和写入操作

原创 2016年08月30日 10:15:48

poi对word2003或者2007的图片读取和写入操作

1.word2003版doc读取某个标签所在位置的值或者图片

HWPFDocument docDocument = new HWPFDocument(is);
org.apache.poi.hwpf.usermodel.Bookmarks bookmarks =     docDocument.getBookmarks();
PicturesTable picturesTable = docDocument.getPicturesTable();
System.out.println("图片数量: " +     picturesTable.getAllPictures().size());
List<Picture> list = picturesTable.getAllPictures();
Map<String, String> result = new HashMap<String, String>();
int count = bookmarks.getBookmarksCount();
for (int i = 0; i < count; i++) {
    Range range = new Range(bookmarks.getBookmark(i).getStart(),  bookmarks.getBookmark(i).getEnd(), docDocument);
    CharacterRun cr = range.getCharacterRun(0);
    if (picturesTable.hasPicture(cr)) {
        Picture pic = picturesTable.extractPicture(cr, true); //获得的图片
    }else{ //如果标签是文本的话,取出标签所在位置的值
        if (range.text().equals("")) {                     result.put(bookmarks.getBookmark(i).getName(), null);
        } else {                   result.put(bookmarks.getBookmark(i).getName(), "\"" + range.text() + "\"");
        }
    }

docx文件图片的写入某个特点标签位置;对图片写入poi jar中的方法存在错误,要自己继承XWPFDocument,重写写入图片的方法

for (BookMark item : bookMarks.getBookmarkList()) {
    File pic = new File("/Users/ycc/Desktop/13d0.png");
    FileInputStream is = new FileInputStream(pic);
    if (item.getBookmarkName().equals("logo2")) {
        String ind = docxDocument.addPictureData(is, docxDocument.PICTURE_TYPE_PNG);//不同版本的poi jar中没有addPicutre(is,docxDocument.PICTURE_TYPE_PNG);返回int。createPicture函数的第一个值可以用docxDocument.getAllPictures().size()-1代替
        XWPFParagraph pargraph = item.getContainerTableRow().getCell(0).addParagraph();//图片标签一定要在某个表格的单元格中
    if (docxDocument.getAllPictures() == null || docxDocument.getAllPictures().isEmpty()) {
    docxDocument.createPicture(0, 100, 150, pargraph); //100是宽 ,150高
    } else {
 docxDocument.createPicture(docxDocument.getAllPictures().size() - 1, 100, 150, pargraph);
}}
System.out.println("测试一下: " + docxDocument.getAllPictures().size());
FileOutputStream fos = new FileOutputStream("/Users/ycc/Desktop/testcopy.docx");
docxDocument.write(fos);
fos.flush();
fos.close();

研究很久,并发现java poi不能处理word2003版的图片插入问题,希望大家能提出好的建议和意见

后面有读取word模版文件,生成表单,生成文件和将生成的文件还原成表单进行修改的方法,包括下拉框的处理。

1.有人会问为什么不直接修改word文档,因为一旦在文档中设置标签之后,当对某个标签位置的内容进行修改后,标签就不见了,因此需要通过代码来对文件进行修改。
2.java poi对word的支持并不好,尤其是对word2003版的支持更少,所以如果需要对word进行处理,可以考虑pageOffice。
3.对于标签的理解,java poi中其实是获得不到所谓的标签的,标签其实也是单元格中的数据,具体的看附件中的bookmark和bookmarks两个类。
http://download.csdn.net/detail/u011376686/9615949 相关代码下载地址

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java/poi读取word,并替换word中的文本内容,向word中插入图片的操作

先贴代码,注:部分代码源自网络其他前辈的文章,这里只是做一个功能整合。 package fcjTool; import java.io.IOException; import java...

利用poi生成word(含表格 图片)

场景:接收前台穿过来的问卷的结果信息,含表格图片,动态生成word生成图片上一篇介绍了用echarts可以直接将base64 码传到后台,然后经解析可生成二进制码,然后利用poi方法可以插入 word...

使用POI向word中添加图片的问题

由于一次需要向word中添加多张图片,其中有图片存在重复,一开始使用的创建图片代码为:xwpf.createPicture(xwpf.getAllPictures().size()-1, 80, 30...

POI生成word时插入图片的bug与修复

POI最新版本在生成word文档时,插入图片不显示。 这里有一个解决办法, http://www.it165.net/pro/html/201108/451.html addPict...

java2Word在Word文档指定位置插入图片或者文字

由于项目需要,苦苦对Java操作Word进行了一番研究,包括当下比较流行的java2Word、jacob、POI、itext等,只能说各有千秋,但是没有一个是完全适合我的,没有办法,只能去各种尝试,在...

POI在word同一行中插入两个图片

POI在word中插入图片不显示bug的修复:http://blog.csdn.net/kimmking/article/details/8203372 这么做还是有个小问题,就是连续插入两...

java导出word功能(包含图片)二

上一章写了导出html其实基本能满

freemarker+poi 模板生成 word添加图片

freemarker+poi 模板生成 word添加图片初次接触这两种工具,希望能对大家有所帮助。poi模板: poi生成效果: freemarker生成效果: package com...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)