poi-tl模板生成word文件(二)

182 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第十九天,点击查看活动详情


上一章列举了一部分常用的标签值,还有部分标签不常用,也可以列举一下。

  • 区块对标签

区块对由前后两个标签组成,开始标签以?标识,结束标签以/标识:{{?sections}}{{/sections}}。如果想要word中的部分内容实现有内容就显示,无内容就隐藏效果,就可以用到这个标签

使用示例:

image.png

Map map = new HashMap();
map.put("start", "startTime");
map.put("end", "endTime");

//此时如果map为空,则该区块会隐藏
Map map1 = new HashMap();
map1.put("sections", map);

复杂表格使用示例:

由于正常使用的模板循环行上有两行数据,而首列只有一行,列表标签无法正常放在上一行表格上

image.png

当标签放在序号位置上时,发现循环的是测试两行下方的内容,尝试将序号该表格分为两行,将中间一行隐藏掉,实现效果如下:

image.png

{{details}} 存放在序号下面一行,且页面上看不到上方的横线 实现步骤如下是,使用工具WPS:

image.png

  1. 选择开始,将填充色改为无填充色

image.png

  1. 选择插入,点击表格,选中绘制表格,选中想要变透明的那一行,进行绘制,会发现那一行变透明了

然后将{{details}} 标签放在序号下方,再运行文件之后,发现正常循环

代码使用示例:

OtherParam param = new OtherParam();
param.setTitle("title");
...
List<Detail> detailsList = new ArrayList(){{
   add("1","2","3"...);
   add("1","2","3"...);
   ...
}};
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); 
Configure config = Configure.builder().bind("details", policy).build();
//如果是普通数据(没有跟Configure绑定)只能render一次,多次只会识别最后一个render的内容
//而列表数据Configure绑定后,可再render其他非循环数据
XWPFTemplate template = XWPFTemplate.compile(resource, config).render( 
      new HashMap<String, Object>() {{ 
           put("details", detailsList);
      }} 
).render(param);