POI3.10.FINAL的word插入图片bug
2014-06-11 00:00
561 查看
摘要: POI3.10.FINAL版本插入图片bug处理。
查看poi源代码,发现添加图片方法存在bug,注释已经标明,如下:
原因在于没有将XmlAnyTypeImpl成功转为CTPicture对象,相当于使用字符串重新创建了CTPicture对象,之后在这个对象中添加任何东西都与本身的Word无关了。
现修改源码,在CTPicture对象生成好之后,再手动添加到原有节点下。
修改XWPFRun类中的addPicture方法,在751行之后添加以下代码即可。
然后只需要简单调用添加图片方法,如下所示:
相信POI会在将来版本修复此bug,这只是临时实现。
查看poi源代码,发现添加图片方法存在bug,注释已经标明,如下:
private List<CTPicture> getCTPictures(XmlObject o) { List<CTPicture> pictures = new ArrayList<CTPicture>(); XmlObject[] picts = o.selectPath("declare namespace pic='"+CTPicture.type.getName().getNamespaceURI()+"' .//pic:pic"); for(XmlObject pict : picts) { if(pict instanceof XmlAnyTypeImpl) { // Pesky XmlBeans bug - see Bugzilla #49934 try { pict = CTPicture.Factory.parse( pict.toString() ); } catch(XmlException e) { throw new POIXMLException(e); } } if(pict instanceof CTPicture) { pictures.add((CTPicture)pict); } } return pictures; }
原因在于没有将XmlAnyTypeImpl成功转为CTPicture对象,相当于使用字符串重新创建了CTPicture对象,之后在这个对象中添加任何东西都与本身的Word无关了。
现修改源码,在CTPicture对象生成好之后,再手动添加到原有节点下。
修改XWPFRun类中的addPicture方法,在751行之后添加以下代码即可。
//修复插入图片bug /*******************/ XmlObject[] picts = graphicData.selectPath( "declare namespace pic='"+CTPicture.type.getName().getNamespaceURI()+"' .//pic:pic"); if(picts!=null && picts.length>0) { XmlObject pict = picts[0]; if(pict instanceof XmlAnyTypeImpl) { XmlAnyTypeImpl impl = (XmlAnyTypeImpl)pict; impl.set(pic); } } 7fe0 /*******************
然后只需要简单调用添加图片方法,如下所示:
xwpfRun.addPicture(new ByteArrayInputStream(bytes), Document.PICTURE_TYPE_GIF, null, width*9525, height*9525);
相信POI会在将来版本修复此bug,这只是临时实现。
相关文章推荐
- POI生成word时插入图片的bug与修复
- poi操作word文档(替换,插入图片)
- POI向word2007文件插入图片时的Bug问题
- POI用addPicture插入图片到word里面无法显示问题解决
- java/poi读取word,并替换word中的文本内容,向word中插入图片的操作
- POI在word同一行中插入两个图片
- java/poi读取word,并替换word中的文本内容,向word中插入图片的操作
- poi生成word文档,插入图片,echar报表生成到word,word表格
- WORD中经常遇到的一个图片插入问题
- 在asp.net生成的word文档中插入图片
- 操作Word对象----在指定位置插入图片并设置大小(原)
- word 2007 中插入图片无法显示,只能显示底部一部分
- 使用vb调用vba在word中插入图片的代码
- WORD 插入图片,只显示一部分的解决办法
- .net实现word里面插入图片
- OLE方式 word中插入图片
- c#操作word 在指定书签插入文字或者图片(转)
- 操作Word对象----在指定位置插入图片并设置大小(原)
- word中插入图片,图表,字符替换,表格填写,合并
- WORD故障解决一:图片插入后显示不全