说明

最近遇到一个比较坑的问题,就是使用poi操作word文档,通过替换书签的方式替换成图片时,图片在word中显示正常,但是通过libreoffice转成pdf时显示不全。经过测试发现,图片插入到word中默认是嵌入型,导致最终转成pdf后的显示问题。因此,对应修改图片的替换方法即可。相关代码如下:

原实现方法

public void createPicture(String blipId, int id, int width, int height, XWPFParagraph paragraph) {final int EMU = 9525;width *= EMU;height *= EMU;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>";XmlToken xmlToken = null;try {xmlToken = XmlToken.Factory.parse(picXml);} catch (XmlException xe) {log.info(xe);}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");
}

改造后实现方法

public void createPicture(String blipId, int id, int width, int height, XWPFParagraph paragraph) {final int EMU = 9525;width *= EMU;height *= EMU;CTDrawing drawing = paragraph.createRun().getCTR().addNewDrawing();CTAnchor anchor = drawing.addNewAnchor();anchor.setBehindDoc(false);anchor.setLocked(false);anchor.setLayoutInCell(true);anchor.setAllowOverlap(true);CTAnchor inline = anchor;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>";XmlToken xmlToken = null;try {xmlToken = XmlToken.Factory.parse(picXml);} catch (XmlException xe) {log.info(xe);}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操作word替换图片显示问题相关推荐

  1. poi操作word替换模板向指定位置添加图表

    poi操作word替换模板向指定位置添加图表 首先是引入pom文件 <dependency><groupId>org.apache.poi</groupId>< ...

  2. Swarm-BZZ踩坑日记之 如何让METMASK小狐狸显示gbzz

    刚入门bzz的新手还不知道小狐狸是什么的请移步上一章节:Swarm-BZZ踩坑日记之 如何在METMASK小狐狸导入节点地址 在浏览器安装好小狐狸,并添加自己的钱包地址后 会发现只显示ETH,并不显示 ...

  3. Java poi 操作word替换模版中固定参数(页眉、段落、表格)

    近期碰到一个稍微头疼的需求,将word模版中的参数替换为实际值,其中包括段落.列表(行数不够时自动递增).页眉:本文以docx文档为例,其中代码有其他地方参考,如有冒犯,还请海涵: 模版: 实现效果: ...

  4. java使用poi操作word模板,插入图片、段落、表格

    java使用poi操作word插入图片.段落.表格 其他链接 准备工作 创建word模板.docx文件 编写模板格式.xml文件 java上手poi maven依赖 使用到的包 具体应用 对应封装方法 ...

  5. 解决 Java poi 3.8 等版本 操作 word 插入 图片 不成功的问题

    解决 Java poi 3.8等版本操作word插入图片不成功的问题 问题: 最近有一个需求是将Excel中的数据转换到word中,其中包括了文字和图片, 在使用 poi 3.8 向word中写入图片 ...

  6. c++字符串操作之std::ostringstream踩坑日记

    c++字符串操作之std::ostringstream踩坑日记 在开发过程中经常会遇到字符串操作,而std::string又没有format操作,这就很难受了. 于是我找到了std::ostrings ...

  7. 使用poi操作word

    导入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifa ...

  8. 报表技术2(百万数据导入导出,POI操作word)

    POI模板导出,操作word 导出用户详情数据(图片,公式处理) 使用模板导出用户详细信息 使用模板引擎 1.编写模板引擎 2.使用模板引擎 百万数据导出 代码实现: 百万数据导入 步骤分析: 1.自 ...

  9. poi操作word常用操作方法,word工具包

    poi操作word工具类 当前poi版本:3.17,升级版本写法略有差异 新版poi操作方法: - poi-5.2.2 操作word [段落] - poi-5.2.2 操作word [表格] - po ...

最新文章

  1. Asp.net实现直接在浏览器预览Word、Excel、PDF、Txt文件(附源码)
  2. CListCtrl使用技巧汇总
  3. raptor五个数排序流程图_数据结构与算法(一):排序(上)
  4. JS配合css实现slide文字框缩放伸展效果
  5. .Net 应用程序体系结构—C#高级编程(第10版)学习笔记5
  6. android小米计算器布局,小米这8个逆天小功能一定用起来!不会用,手机简直白买...
  7. AOP 代理(AOP Proxy)
  8. linux 查看设备 中断号,查看powerpc linux 软件中断号 硬件中断号映射关系
  9. 最小权顶点覆盖问题分析
  10. 吃鸡决赛圈直播却卡屏的我心好痛,立马找来开发刚了一波
  11. python 京东签到在哪里_python 使用selenium登陆京东签到哪京豆
  12. C语言排序方法-----二元选择排序法
  13. @ApiImplicitParam注解的dataType、paramType两个属性的区别?
  14. 1.9_heap_topK_topK问题
  15. 【转】pkg-config与LD_LIBRARY_PATH
  16. JAVA 身份证号码的验证
  17. python代码检查工具(静态代码审查)
  18. 摄像头视频捕捉(IsampleGrabberCB实现)
  19. 2017春运抢票软件哪个好,教你看懂刷票原理!
  20. cmake学习笔记--cmake的打印、创建工程等基本操作(1)

热门文章

  1. 查询物流信息并筛选最后站点
  2. one + two = 3 数组(转载)
  3. 比特率,帧率,分辨率对视频画质的影响
  4. 副业做什么比较靠谱有哪些推荐,适合宝妈做的副业分析
  5. 快速傅里叶变换 及MATLAB函数
  6. 降低机房95计费成本思路,降低带宽,节约成本
  7. 厦大考研:复习过程中如何克服拖延症
  8. Java+Selenium框架: 如何在日历中选择日期
  9. java设置单元格格式_java报表开发之单元格格式设置
  10. 从yolov1到yolov3的进化之路