1、前言

  Poi-tl提供了基于word模板文件导出word文件的功能。文档地址:http://deepoove.com/poi-tl/。

  用下来,总体感觉还是很方便的。但使用过程,有几个细节,值得记叙。

2、关于复选框

  有一组文字,每个词前面有复选框,根据值的不同,可以打勾,也可以不打勾。

  表现如下:

  勾选/不勾选在word中使用符号,即Wingdings 2字体。通过查Wingdings 2表:

  勾选框:字符代码为0x0052,对应键盘字符R。

  不勾选框:字符代码为0x00A3,由于超过ASCII码表值,没有对应键盘字符。

  模板脚本:

{{actionItem0}}聚餐 {{actionItem1}}轰趴 {{actionItem2}}郊游 {{actionItem3}}唱歌

  Spring Boot代码:

			// 字体Wingdings 2的符号
TextRenderData selSymbol = new TextRenderData("R",new Style("Wingdings 2",10.5));
TextRenderData unselSymbol = new TextRenderData("\u00A3",new Style("Wingdings 2",10.5)); int actionItem = actionInfo.getActionItem();
String fieldName = "";
for(int i = 0; i < 4; i++) {
fieldName = "actionItem" + i;
int bitValue = (actionItem >> i) & 0x01;
if (bitValue == 1) {
datas.put(fieldName, selSymbol);
}else {
datas.put(fieldName, unselSymbol);
}
}

  4个选项,使用bitmap编码,bit0表示是否聚餐,bit1表示是否轰趴,bit2表示是否郊游,bit3表示是否唱歌。

  然后,就可以输出word文件了。

			// 配置
Configure config = Configure.builder()
.useSpringEL()
.build(); XWPFTemplate template = XWPFTemplate.compile(wordTemplate,config).render(datas);
template.writeAndClose(new FileOutputStream(outputFile));

3、关于图片列表

  如果单个图片,模板文件中使用{{@var}}即可输出,但如果是一个列表,就需要用区块对,然后怎样显示图片对象呢?例子中只有文本列表使用{{=#this}}表示文本项。经试验,用{{@#this}}表示图片项。

  模板文件:

{{?imgList}}{{@#this}} {{/imgList}}

  注意:{{@#this}}后面有一个空格,支持水平排列。

  Spring Boot代码:

			// 获取图片路径列表
List<String> imgPathList = getImgPathList();
// 输出的图片对象列表
List<PictureRenderData> imgList = new ArrayList<PictureRenderData>();
File imgFile=null;
FileInputStream imgInputStream=null;
BufferedImage image=null;
for (int i =0; i < imgPathList.size(); i++){
String imgPath = imgPathList.get(i);
imgFile=new File(imgPath);
if(imgFile.exists()) {
imgInputStream=new FileInputStream(imgFile);
image= ImageIO.read(imgInputStream);
// 将java图片转成PictureRenderData类型对象
PictureRenderData picItem = Pictures.ofBufferedImage(image, PictureType.PNG).size(60, 50).create();
imgList.add(picItem);
}
}
datas.put("imgList",imgList);

  这样,就可以正确显示图片列表了。

使用poi-tl导出word文件的几个技巧的更多相关文章

  1. 记录一下表格用poi的导出word

    也是网上找的代码http://53873039oycg.iteye.com/blog/2152009,但是横向合并单元格没成功.只能用很蠢的办法建立了好多table public void fillT ...

  2. java导出word文件

    java导出word文件 test5.ftl文件生存方法, 第一步:用word新建test5.doc,填写完整模板,将需导出数据用${}代替 第二步:将test5.doc另存为test5.xml 第三 ...

  3. 利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)

    https://blog.csdn.net/Fishroad/article/details/47951061?locationNum=2&fps=1 先下载jacob.jar包.解压后将ja ...

  4. java 实现poi方式读取word文件内容

    1.下载poi的jar包 下载地址:https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.tar.gz ...

  5. 【POI】导出xls文件报错:The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook

    使用POI导出xls文件,由于数据过多,导致导出xls报错如下: The maximum number of cell styles was exceeded. You can define up t ...

  6. java中使用poi导入导出excel文件_并自定义日期格式

    Apache POI项目的使命是创造和保持java API操纵各种文件格式基于Office Open XML标准(OOXML)和微软的OLE复合文档格式(OLE2)2.总之,你可以读写Excel文件使 ...

  7. vue项目前端导出word文件(bug解决)

    摘要:之前项目中导出价格表是由后端实现,前端只需要调用接口下载word即可,后来业务改变比较大,word模版需要一直改动,后端改起来相对麻烦,后来直接前端自己定义模版,实现下载word文档. 一.需要 ...

  8. java根据word模板导出word文件

    1.word模板文件处理,如下图所示在word 文档中填值的地方写入占位变量 2.将word文档另存为xml文件.编辑如下图,找到填写的占位,修改为${bcrxm}格式 3.将文件后缀名改为.ftl文 ...

  9. FreeMark导出word文件

    1.编辑好word 2.将word模板另存为xml格式, 把需要动态生成的文字用${xxx}代替 eg: 张强 替换为:${name} 注意:图片是很长的一个base64的字符,同样替换就好 比如替换 ...

  10. 【POI】导出excel文件,不生成中间文件,直接将内存中的数据创建对象下载到浏览器

    不是从InputStream中read,然后outputStream再write @RequestMapping("download4Excel") public void dow ...

随机推荐

  1. C# +SQL 存储过程 实现系统数据权限审查AOP效果

    背景: 1.C/S系统架构 2.前端 Extjs 3.后台C# 4.数据库SQL 前端通过ajAx请求与后台通信. 前端应用页面统一继承入口类  BasePage 应用页面 public partia ...

  2. ChatGPT3.5使用体验

    优点 1.ChatGPT 能颠覆现有的搜索引擎(百度.谷歌). 2.ChatGPT 的交互体验非常好,满足"智能助手"这种工具. 3.如何使用好ChatCPT? 回到一个经典的问题 ...

  3. DataLeap 数据资产实战:如何实现存储优化?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 背景 DataLeap 作为一站式数据中台套件,汇集了字节内部多年积累的数据集成.开发.运维.治理.资产.安全等全 ...

  4. 五月十四号java基础知识点

    class Person{ private String name; private int age; public Person(String name,int age){ this.name = ...

  5. smtp.office365.com 无法从传输连接中读取数据: net_io_connectionclosed

    这几天发送邮件时突然会报一个错 无法从传输连接中读取数据:net_io_connectionclosed. 因使用的是 smtp.office365.com 经过查询,发现了这个 Recently, ...

  6. classmethod和staticmethod装饰器

    """ 两个装饰器 @classmethod 把一个对象绑定的方法,修改成为一个类方法 1.在方法中仍然可以引用类中的静态变量 2.可以不用实例化对象,就直接使用类名在外 ...

  7. Kubernetes入门实践(Pods)

    为了解决多应用联合运行的问题,同时还要不破坏容器的隔离,就要再对多个容器进行打包.Pod就是对容器的打包,里面的容器可以看成是一个整体,总是能一起调度.一起运行,绝不会出现分离的情况,而Pod属于Ku ...

  8. Kubernetes中使用Helm2的安全风险

    参考 http://rui0.cn/archives/1573 英文文章  https://blog.ropnop.com/attacking-default-installs-of-helm-on- ...

  9. VUEX(状态管理)之憨憨篇

    1.导入vuex包 import vuex from 'vuex' 2.注册vuex到vue中 vue.use(vuex) 3.new vuex.store() 得到一个数据存储对象 var stor ...

  10. [人脸活体检测] 论文:Aurora Guard- Real-Time Face Anti-Spoofing via Light Reflection

    Aurora Guard- Real-Time Face Anti-Spoofing via Light Reflection 论文简介 该论文提出的方法已经部署到百万台终端,整篇文章底气十足.作者设 ...