使用poi-tl导出word文件的几个技巧
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);
这样,就可以正确显示图片列表了。
分类:
Spring Boot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)