poi-tl 1.8.x 导出Word,解析List格式数据(文本、图片)
poi-tl(poi template language)是Word模板引擎,基于Microsoft Word模板和数据生成新的文档。
1.8.2文档:Poi-tl Documentation
Github:https://github.com/Sayi/poi-tl
文本
如果文本数据是List格式,如
List<String> listStr = new ArrayList<String>() {
{
add("abc");
add("cba");
}
};
传入的数据结构为:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TemplateEO {
private List<String> listStr;
}
则模板文件可写为
{{?listStr}}
{{=#this}}
{{/listStr}}
一点插曲
之前没注意到=#this
,就自己写了一个方法把Listtext
:
private List<Map<String, String>> strList2MapList(List<String> strList){
List<Map<String, String>> mapList = new ArrayList<>();
strList.forEach(str -> {
Map<String, String> map = new HashMap<>();
map.put("text", str);
mapList.add(map);
});
return mapList;
}
图片
如果图片数据是List格式(每张图均需为PictureRenderData类型),如
List<PictureRenderData> listPic = new ArrayList<PictureRenderData>() {
{
add(pic1);
add(pic2);
}
};
截至目前的1.8.2版本就不能用=#this
了,=#this
仅可用来引用当前文本对象。转换成List<Map<String, PictureRenderData>>
或List<Map<String, Object>>
类型也会解析出错。我想到的解决方法是新建一个类,类中声明一个Object类型的变量,然后构建这个类的List。
新建ObjectEO
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ObjectEO {
private Object obj;
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TemplateEO {
private List<ObjectEO> objList;
}
对List<PictureRenderData> pics
进行处理
List<ObjectEO> objectEOS = new ArrayList<>();
pics.forEach(pic-> {
ObjectEO imgObj = ObjectEO.builder().obj(pic).build();
objectEOS.add(imgObj);
});
TemplateEO tempateEO = TemplateEO.builder().objList(objectEOS).build();
模板这样写:
{{?objList}}
{{@obj}}
{{/objList}}
注意
还有需要注意的一点,如果想让图片在一行中显示,超出换行,不能写成下面这样:
{{?objList}}{{@obj}}{{/objList}}
而应该在循环的变量后至少加一个空格:
{{?objList}}{{@obj}} {{/objList}}
此外模板对空格也很敏感,比如制作模板时复制粘贴文本出现了空格比如{{var }}
都会无法解析。
分类:
后端开发 / POI
, 后端开发
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~