poi 拆分带图片的word_POI导出简单的带有图片的Word文档
由于导出的文档中需要插入图片,因此需要新建类来处理由于插入图片引进的错误即“导出的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文档相关推荐
- 一个简单的解决方法:word文档打不开,错误提示mso.dll模块错误。
一个简单的解决方法:word文档打不开,错误提示mso.dll模块错误. 参考文章: (1)一个简单的解决方法:word文档打不开,错误提示mso.dll模块错误. (2)https://www.cn ...
- 一键导出PostgreSQL数据库表设计为word文档
背景 项目开始时,数据库表设计是从概要设计到详细设计,再到数据库中的表结构,有一套完整的文档: 然而,随着项目的演进,需求的变更,导致数据库表结构发生了比较大的变化(加表,加字段,改类型等),对于大多 ...
- 【操作word】Java + POI导出富文本的内容到word文档
这周工作中,遇到一个需求是需要将数据库中富文本内容导出到word文档里面,于是就采用POI技术实现了一下导出word文档的功能.(word文档是识别html内容的,所以富文本内容也自然能够识别.) 一 ...
- mysql数据库结构导出word_Windows导出MySQL数据库表结构到Word文档-DBExportDoc V1.0 For MySQL...
必要条件: 1.Microsoft Office Word(我用WPS不行) 2.mysql-connector-odbc 3.会看文档 下载地址:关注微信公众号:八四七,回复5获取,压缩包中包含有具 ...
- word样式基准_「word技巧」简单的排版技巧—给word文档添加各种样式边框线
一直在说排版,但一篇word文档到底怎么排版才好看?这涉及到很多方面的技巧. 不过,有时候,一个很简单或是不起眼的小动作,有可能就会让整个word文档显得高大上起来. 比如说,给文档随意添加个边框线, ...
- Springboot 超简单实现在线预览,Word文档 doc、xlsx、pdf、txt等
前言 PDF.TXT 只要资源可访问,根本就不需要进行任何处理,直接访问查看就完事了. 也是因为这个PDF可以直接查看(现在浏览器基本支持了),那么我们实现Word文档在线预览,其实也是 把WORD文 ...
- Java poi实现合并word文档,兼容图片合并(java实现word导出)
需求,今天有个需求,实现word文档批量导出,并附带图片,这里的批量导出是指导出一份word文档存在多分相同类型的数据. 实现方式,定义一份word文档模板,使用占位符方式来替换文本内容. 问题,怎么 ...
- java freemarker 图片_java通过freemarker导出包含富文本图片的word文档
废话不多说,进入正题! 本文重点在于:对富文本图片的导出(基础的freemarker+word模板导出这里不做详细解说哈) (ps:大神的东西太深奥~~懵逼了 一周才搞定,为了方便后来在更加简单,清晰 ...
- Java 批量导出包含图片的Word文档
业务需求:客户需要在资产管理系统中批量导出包含资产二维码等信息的Word文档,如下图 导出Word文档效果如下图 需求就摆在面前,接下来就是技术选型问题了.由于一开始做编程是从OC入门的,但是由于OC ...
- C#整合layui实现导出带多张图片的word文档
最近研究了一下如何实现利用C# webapi方式导出word文档,且文档中包含多张图片,现在给出实现过程. 准备阶段: 开发工具vs2017,在项目引用那里右键点击管理NuGet程序包,查询找到wor ...
最新文章
- 【CV】吴恩达机器学习课程笔记第11章
- 了解生成对抗网络(GAN)
- 关于unity的一个不错的插件平台
- keystone同步数据之后不报错,查看日志有错误,进入MySQL没有如何数据解决方法
- mac 上安装服务,查看服务,重启和关闭
- java中array,arrayList,iterator;
- 从容 IT 人生路,开发工具伴我行——“葡萄城 30 周年”征文
- 创科视觉软件说明书_【拓斯达 | GGII】20192023年中国机器视觉行业调研
- python查看函数参数快捷键_python查看函数源代码快捷键_pycharm中查看源码的快捷键...
- mysql 5.6一主两从_Centos7 下配置mysql5.6主从复制实例(一主两从)
- 阿里云商标顾问注册申请流程、价格及常见问题解答
- 如何根据小米12手机电池信息计算充电时间
- 人均8万啊,腾讯豪掷21亿股票奖励员工,爱奇艺却大规模裁员,这就是差距吗?
- 卡耐基梅隆大学计算机熬夜,美国25所著名大学学生平均作息时间表 原来留学生的日子也不好过!...
- php生成二维码图片
- canvas绘制简单的霓虹灯效果
- PHP笔试面试题精选
- Adobe Flash离线安装 (无需联网安装)
- Gnome排序(地精排序)
- 辽宁聚能合创:抖音怎么增加浏览量?
热门文章
- [不得不转载]一个时代的结束:微软盖茨的人生掠影
- idea自动生成unit test插件
- 同步异步阻塞非阻塞杂记 1
- mysql实用教程的数据构造
- Guava库学习:学习Concurrency(二)Monitor_2
- JS正则表达式 替换首尾和中间的空格
- IBM AIX5.3 linux下C/C++实现HTTPS接口
- libgdx游戏引擎开发笔记(八)SuperJumper游戏例子的讲解(篇二)---- 游戏界面跳转...
- Oracle内存结构详解(四)--Oracle SGA其他组成部分
- 二手机床:中国高端机床装备制造列入战略性产业