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++ 猜数字

    #include <iostream> #include <random> #include <limits> namespace random { std::ra ...

  2. 网络抓包 tcpdump 使用指南

    在网络问题的调试中,tcpdump应该说是一个必不可少的工具,和大部分linux下优秀工具一样,它的特点就是简单而强大.它是基于Unix系统的命令行式的数据包嗅探工具,可以抓取流动在网卡上的数据包. ...

  3. [网络/Java EE/Web]Tomcat/Nginx中配置全局的安全响应头(header)——X-Frame-Options / X-XSS-Protection / X-Content-Options

    Step1 配置Tomcat step1.1 查看是否已配置目标的HTTP网络安全头 方式1 – Tomcat / conf/web.xml cat /opt/myTomcat/conf/web.xm ...

  4. .NET中使用Redis总结——2.项目实战

    接上篇.NET中使用Redis总结 -- 1.Redis搭建 看一些Redis相关资料,.NET 方面ServiceStack.Redis 用的比较多,就直接拿来用了. 在使用过程中经常过出现假死状态 ...

  5. internal java compiler error

    1.导入Maven项目运行报错:  解决方法:找到File->Settings  修改配置 再次运行就可以了.

  6. 写一个 Hello SpringBoot2 项目

    需求:向浏览发送/hello请求,并响应 Hello,Spring Boot 2 解决: 项目目录:controller层.Main启动项.pom.xml controller层:写好逻辑跳转,当浏览 ...

  7. DolphinDB +Python Airflow 高效实现数据清洗

    DolphinDB 作为一款高性能时序数据库,其在实际生产环境中常有数据的清洗.装换以及加载等需求,而对于该如何结构化管理好 ETL 作业,Airflow 提供了一种很好的思路.本篇教程为生产环境中 ...

  8. odoo 开发入门教程系列-继承(Inheritance)

    继承(Inheritance) Odoo的一个强大方面是它的模块化.模块专用于业务需求,但模块也可以相互交互.这对于扩展现有模块的功能非常有用.例如,在我们的房地产场景中,我们希望在常规用户视图中直接 ...

  9. Auto-GPT测评:自信、努力、不合格

    这两天,Auto-GPT 爆火 https://github.com/Torantulino/Auto-GPT 它是一款让最强语言模型GPT-4能够自主完成任务的模型,让整个AI圈疯了.它的嘴大突破是 ...

  10. WPF Window设置ResizeMode="NoResize"

    WPF窗口设置属性ResizeMode="NoResize"时,回到桌面后,点击任意应用,都会将此窗口激活. 我们来看下详细操作: 1. WPF窗口设置属性ResizeMode 2 ...