使用POI向word中添加图片的问题
2016-11-15 17:49
267 查看
由于一次需要向word中添加多张图片,其中有图片存在重复,一开始使用的创建图片代码为:
上述代码对于重复的图片流不会第二次生成id,因此会造成第二次出现的图片被后续图片覆盖的情况。因此,修改为如下处理方式,解决了重复图片的问题:
xwpf.createPicture(xwpf.getAllPictures().size()-1, 80, 30,pargraph);
public void createPicture(int id, int width, int height,XWPFParagraph paragraph) { final int EMU = 9525; width *= EMU; height *= EMU; String blipId = getAllPictures().get(id).getPackageRelationship().getId(); CTInline inline = paragraph.createRun().getCTR().addNewDrawing().addNewInline(); String picXml = "" + "<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">" + " <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" + " <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" + " <pic:nvPicPr>" + " <pic:cNvPr id=\"" + id + "\" name=\"Generated\"/>" + " <pic:cNvPicPr/>" + " </pic:nvPicPr>" + " <pic:blipFill>" + " <a:blip r:embed=\"" + blipId + "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>" + " <a:stretch>" + " <a:fillRect/>" + " </a:stretch>" + " </pic:blipFill>" + " <pic:spPr>" + " <a:xfrm>" + " <a:off x=\"0\" y=\"0\"/>" + " <a:ext cx=\"" + width + "\" cy=\"" + height + "\"/>" + " </a:xfrm>" + " <a:prstGeom prst=\"rect\">" + " <a:avLst/>" + " </a:prstGeom>" + " </pic:spPr>" + " </pic:pic>" + " </a:graphicData>" + "</a:graphic>"; // CTGraphicalObjectData graphicData = inline.addNewGraphic().addNewGraphicData(); XmlToken xmlToken = null; try { xmlToken = XmlToken.Factory.parse(picXml); } catch (XmlException xe) { xe.printStackTrace(); } inline.set(xmlToken); inline.setDistT(0); inline.setDistB(0); inline.setDistL(0); inline.setDistR(0); CTPositiveSize2D extent = inline.addNewExtent(); extent.setCx(width); extent.setCy(height); CTNonVisualDrawingProps docPr = inline.addNewDocPr(); docPr.setId(id); docPr.setName("Picture" + id); docPr.setDescr("Generated"); }
上述代码对于重复的图片流不会第二次生成id,因此会造成第二次出现的图片被后续图片覆盖的情况。因此,修改为如下处理方式,解决了重复图片的问题:
String ind = xwpf.addPictureData(is, XWPFDocument.PICTURE_TYPE_GIF); int id = xwpf.getNextPicNameNumber(XWPFDocument.PICTURE_TYPE_GIF); xwpf.createPicture(ind, id, 80, 30,pargraph);
public void createPicture(String blipId, int id, int width, int height,XWPFParagraph paragraph) { final int EMU = 9525; width *= EMU; height *= EMU; //String blipId = getAllPictures().get(id).getPackageRelationship().getId(); CTInline inline = paragraph.createRun().getCTR().addNewDrawing().addNewInline(); String picXml = "" + "<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">" + " <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" + " <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" + " <pic:nvPicPr>" + " <pic:cNvPr id=\"" + id + "\" name=\"Generated\"/>" + " <pic:cNvPicPr/>" + " </pic:nvPicPr>" + " <pic:blipFill>" + " <a:blip r:embed=\"" + blipId + "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>" + " <a:stretch>" + " <a:fillRect/>" + " </a:stretch>" + " </pic:blipFill>" + " <pic:spPr>" + " <a:xfrm>" + " <a:off x=\"0\" y=\"0\"/>" + " <a:ext cx=\"" + width + "\" cy=\"" + height + "\"/>" + " </a:xfrm>" + " <a:prstGeom prst=\"rect\">" + " <a:avLst/>" + " </a:prstGeom>" + " </pic:spPr>" + " </pic:pic>" + " </a:graphicData>" + "</a:graphic>"; // CTGraphicalObjectData graphicData = inline.addNewGraphic().addNewGraphicData(); XmlToken xmlToken = null; try { xmlToken = XmlToken.Factory.parse(picXml); } catch (XmlException xe) { xe.printStackTrace(); } inline.set(xmlToken); inline.setDistT(0); inline.setDistB(0); inline.setDistL(0); inline.setDistR(0); CTPositiveSize2D extent = inline.addNewExtent(); extent.setCx(width); extent.setCy(height); CTNonVisualDrawingProps docPr = inline.addNewDocPr(); docPr.setId(id); docPr.setName("Picture" + id); docPr.setDescr("Generated"); }
相关文章推荐
- POI用addPicture插入图片到word里面无法显示问题解决
- 解决vs2008使用wpf Image控件不能添加图片问题
- 使用freemarker生成word、html时图片显示问题
- POI插入图片的时候,使用resize函数还是变形的问题
- Java 使用Freemarker导出word 文档,解决当一段内容中既有文字又有图片的问题
- [置顶] Java 利用poi给word添加页眉页脚,页眉左边为公司logo图片,右为公司全称,页脚左为公司地址,右为页码总页数
- 解决POI3.10 添加图片不成功的问题
- UCGUI中如何使用BUTTON_SetBMPEx()函数在按钮中添加图片问题
- 使用poi替换word中的文字和图片实现打印
- word 中如何添加图片和表格目录或链接的问题
- poi-tl 自定义图片处理类,解决生成多个文件时图片重复出现在word文档中问题
- 使用POI的HWPF操作word(未解决中文乱码问题)
- JAVA不使用POI给Word文档添加水印
- java使用poi解析2007以上的word文档中的表格与图片
- 解决Vue2.0中使用less给元素添加背景图片出现的问题
- 使用freemarker生成word、html时图片显示问题
- java利用poi添加多张图片到word
- 关于向Android项目中的drawable下添加图片却无法使用的问题
- 又拍云常见使用问题(如何添加和设置水印图片)
- 点击图片添加文件在Chrome中使用的兼容问题