由于导出的文档中需要插入图片,因此需要新建类来处理由于插入图片引进的错误即“导出的word文档在打开时会报内容出现错误,无法打开文件”

新建处理类为:

importorg.apache.poi.xwpf.usermodel.XWPFDocument;

importjava.io.IOException;

importjava.io.InputStream;

importorg.apache.poi.openxml4j.opc.OPCPackage;

importorg.apache.poi.xwpf.usermodel.XWPFDocument;

importorg.apache.poi.xwpf.usermodel.XWPFParagraph;

importorg.apache.xmlbeans.XmlException;

importorg.apache.xmlbeans.XmlToken;

importorg.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;

importorg.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;

importorg.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;

/**

*@authordongqianggao

*@version2017-12-18 18:08

*/

public classCustomXWPFDocument extendsXWPFDocument {

publicCustomXWPFDocument(InputStream in) throwsIOException {

super(in);

}

/**

*

*/

publicCustomXWPFDocument() {

super();

//TODO Auto-generated constructor stub

}

/**

*@parampkg

*@throwsIOException

*/

publicCustomXWPFDocument(OPCPackage pkg) throwsIOException {

super(pkg);

//TODO Auto-generated constructor stub

} // picAttch图片后面追加的字符串 可以是空格

public voidcreatePicture(XWPFParagraph paragraph,intid, intwidth, intheight,String picAttch) {

final intEMU = 9525;

width *= EMU;

height *= EMU;

String blipId = getAllPictures().get(id).getPackageRelationship()

.getId();

CTInline inline = paragraph.createRun().getCTR()

.addNewDrawing().addNewInline();

paragraph.createRun().setText(picAttch);

String picXml = ""

+ ""

+ " "

+ " "

+ " "+ "

+ id

+ "\"name=\"Generated\"/>"

+ " "

+ "

"

+ " "

+ "

+ blipId

+ "\"xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>"

+ " "

+ " "

+ " "

+ " "

+ " "

+ " "

+ " "

+ "

+ width

+ "\"cy=\""

+ height

+ "\"/>"

+ " "

+ " "

+ " "

+ " "

+ " "

+ " "

+ " "+ "";

// CTGraphicalObjectData graphicData =

inline.addNewGraphic().addNewGraphicData();

XmlToken xmlToken = null;

try{

xmlToken = XmlToken.Factory.parse(picXml);

} catch(XmlException xe) {

xe.printStackTrace();

}

inline.set(xmlToken);

// graphicData.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("图片"+ id);

docPr.setDescr("");

}

}

实际使用方法如下:

public voidexpWord(OrderRefund orderRefund,HttpServletRequest request,HttpServletResponse response){

try{

CustomXWPFDocument doc = newCustomXWPFDocument(); //创建文档实体

XWPFParagraph title = doc.createParagraph();//创建一个段落

title.setAlignment(ParagraphAlignment.CENTER); //设置段落的位置

XWPFRun r1 = title.createRun(); //设置相同样式的文本

r1.setBold(true); //设置字体是否加粗

r1.setFontFamily("宋体"); //设置字体

r1.setText("退费审批表");//添加文字内容

r1.setFontSize(16); //设置字体大小

//插入图片文件,同样需要新建一个段落实体

XWPFParagraph pic = doc.createParagraph();

pic1.setAlignment(ParagraphAlignment.CENTER);

doc.addPictureData(newFileInputStream(request.getSession().getServletContext().getRealPath("/")+"/upload/refund/qmw.png"),XWPFDocument.PICTURE_TYPE_PNG);

doc.createPicture(pic,doc.getAllPictures().size()-1, 97, 47," ");

//判断添加的图片的类型

intres = XWPFDocument.PICTURE_TYPE_PICT;

if(picType != null){

if(picType.equalsIgnoreCase("png")){

res = XWPFDocument.PICTURE_TYPE_PNG;

}else if(picType.equalsIgnoreCase("gif")) {

res = XWPFDocument.PICTURE_TYPE_GIF;

}else if(picType.equalsIgnoreCase("jpg") || picType.equalsIgnoreCase("jpeg")){

res = XWPFDocument.PICTURE_TYPE_JPEG;

}

}

//通过respons输出提示框下载文件,要注意的是如果文件名称中有文字,需要对文件名称进行URLEncoder编码

String fileName = "退费审批表——"+orderRefund.getProInfo().getProName();

OutputStream out=response.getOutputStream();

response.setHeader("Content-Type","application/ms-winword");

response.addHeader("Content-Disposition","attachment;filename=\""+ URLEncoder.encode(fileName,"UTF-8")+ ".docx\"");

response.setContentType("application/octet-stream");

response.setCharacterEncoding("UTF-8");

doc.write(out);

out.close();

}catch(Exception e){

e.printStackTrace();

}

}

poi 拆分带图片的word_POI导出简单的带有图片的Word文档相关推荐

  1. 一个简单的解决方法:word文档打不开,错误提示mso.dll模块错误。

    一个简单的解决方法:word文档打不开,错误提示mso.dll模块错误. 参考文章: (1)一个简单的解决方法:word文档打不开,错误提示mso.dll模块错误. (2)https://www.cn ...

  2. 一键导出PostgreSQL数据库表设计为word文档

    背景 项目开始时,数据库表设计是从概要设计到详细设计,再到数据库中的表结构,有一套完整的文档: 然而,随着项目的演进,需求的变更,导致数据库表结构发生了比较大的变化(加表,加字段,改类型等),对于大多 ...

  3. 【操作word】Java + POI导出富文本的内容到word文档

    这周工作中,遇到一个需求是需要将数据库中富文本内容导出到word文档里面,于是就采用POI技术实现了一下导出word文档的功能.(word文档是识别html内容的,所以富文本内容也自然能够识别.) 一 ...

  4. mysql数据库结构导出word_Windows导出MySQL数据库表结构到Word文档-DBExportDoc V1.0 For MySQL...

    必要条件: 1.Microsoft Office Word(我用WPS不行) 2.mysql-connector-odbc 3.会看文档 下载地址:关注微信公众号:八四七,回复5获取,压缩包中包含有具 ...

  5. word样式基准_「word技巧」简单的排版技巧—给word文档添加各种样式边框线

    一直在说排版,但一篇word文档到底怎么排版才好看?这涉及到很多方面的技巧. 不过,有时候,一个很简单或是不起眼的小动作,有可能就会让整个word文档显得高大上起来. 比如说,给文档随意添加个边框线, ...

  6. Springboot 超简单实现在线预览,Word文档 doc、xlsx、pdf、txt等

    前言 PDF.TXT 只要资源可访问,根本就不需要进行任何处理,直接访问查看就完事了. 也是因为这个PDF可以直接查看(现在浏览器基本支持了),那么我们实现Word文档在线预览,其实也是 把WORD文 ...

  7. Java poi实现合并word文档,兼容图片合并(java实现word导出)

    需求,今天有个需求,实现word文档批量导出,并附带图片,这里的批量导出是指导出一份word文档存在多分相同类型的数据. 实现方式,定义一份word文档模板,使用占位符方式来替换文本内容. 问题,怎么 ...

  8. java freemarker 图片_java通过freemarker导出包含富文本图片的word文档

    废话不多说,进入正题! 本文重点在于:对富文本图片的导出(基础的freemarker+word模板导出这里不做详细解说哈) (ps:大神的东西太深奥~~懵逼了 一周才搞定,为了方便后来在更加简单,清晰 ...

  9. Java 批量导出包含图片的Word文档

    业务需求:客户需要在资产管理系统中批量导出包含资产二维码等信息的Word文档,如下图 导出Word文档效果如下图 需求就摆在面前,接下来就是技术选型问题了.由于一开始做编程是从OC入门的,但是由于OC ...

  10. C#整合layui实现导出带多张图片的word文档

    最近研究了一下如何实现利用C# webapi方式导出word文档,且文档中包含多张图片,现在给出实现过程. 准备阶段: 开发工具vs2017,在项目引用那里右键点击管理NuGet程序包,查询找到wor ...

最新文章

  1. 【CV】吴恩达机器学习课程笔记第11章
  2. 了解生成对抗网络(GAN)
  3. 关于unity的一个不错的插件平台
  4. keystone同步数据之后不报错,查看日志有错误,进入MySQL没有如何数据解决方法
  5. mac 上安装服务,查看服务,重启和关闭
  6. java中array,arrayList,iterator;
  7. 从容 IT 人生路,开发工具伴我行——“葡萄城 30 周年”征文
  8. 创科视觉软件说明书_【拓斯达 | GGII】20192023年中国机器视觉行业调研
  9. python查看函数参数快捷键_python查看函数源代码快捷键_pycharm中查看源码的快捷键...
  10. mysql 5.6一主两从_Centos7 下配置mysql5.6主从复制实例(一主两从)
  11. 阿里云商标顾问注册申请流程、价格及常见问题解答
  12. 如何根据小米12手机电池信息计算充电时间
  13. 人均8万啊,腾讯豪掷21亿股票奖励员工,爱奇艺却大规模裁员,这就是差距吗?
  14. 卡耐基梅隆大学计算机熬夜,美国25所著名大学学生平均作息时间表 原来留学生的日子也不好过!...
  15. php生成二维码图片
  16. canvas绘制简单的霓虹灯效果
  17. PHP笔试面试题精选
  18. Adobe Flash离线安装 (无需联网安装)
  19. Gnome排序(地精排序)
  20. 辽宁聚能合创:抖音怎么增加浏览量?

热门文章

  1. [不得不转载]一个时代的结束:微软盖茨的人生掠影
  2. idea自动生成unit test插件
  3. 同步异步阻塞非阻塞杂记 1
  4. mysql实用教程的数据构造
  5. Guava库学习:学习Concurrency(二)Monitor_2
  6. JS正则表达式 替换首尾和中间的空格
  7. IBM AIX5.3 linux下C/C++实现HTTPS接口
  8. libgdx游戏引擎开发笔记(八)SuperJumper游戏例子的讲解(篇二)---- 游戏界面跳转...
  9. Oracle内存结构详解(四)--Oracle SGA其他组成部分
  10. 二手机床:中国高端机床装备制造列入战略性产业