标题 freemorker 模板使用的特殊情况,list循环嵌套,导出是带有图片,导出文字换行等
使用freemorker 导出 doc 时,简单赘述下:
首先 通过挖洞的形式 例如用 ${test} 作为变量,挖好我们需要导出的所有变量的值,
然后将文件另存为 word.xml ,之后格式化xml,将格式化后的xml文件转成ftl 文件,再ftl 文件中 进行 freemorker 的便签编写。
- 当需要导出的数据比较复杂时,会出现循环嵌套问题。
解决方案:
将需要导出的数据封装为list<List>类型 ,循环使用freemorker 中的标签<#list>进行循环,如图所示:
其中 后端的封装类型
这种 循环 一般用于在doc 中 插入表格,表格数据还不确定的情况,
而循环 嵌套循环 则 一般在于 整块数据 需要循环 而这块数据中 ,还有一个或是多个表格的情况
对于后台的封装数据有多种选择,我一般使用
第一层使用:List testArray = new ArrayList<>();
如果还需要循环
第二层使用:List test2Array = new ArrayList<>();
之后将其他数据和test2Array 一起add 到testArray 中。
这样第一个<#list>时,其他数据正常展示,test2Array 则需要在进行 <#list> 操作
- 当导出的doc ,其中包含有证件照或是普通图片时,动态的替换照片
解决方法:
主要还是ftl 文件的修改。具体的改动比较多,常规模式的参数写入就不一一赘述。只展示 当图片作为变量时的 ftl 文件的改动
以下截图分为原版和改动两部分,请逐一改动
第一处改动:
原版:
改版
这里的使用<#list> 标签是遍历循环的常规操作,当然是因为我这里需要用到循环,只是单张图片替换,则不要照搬。rid 是指向,由于有多张图片,则rid不能写死,否则所有的图片只会显示第一张的图片样子。pxStudent 相当于for 循环中的 i ,_index 在这里是表示序号,是会自增的变量,不需要自己定义。
第二处改动:
原版:
改版:
这里的rid 主要是和上面的图片id 相对应,确定图片在模板中展示的位置。
第三处改动:
原版:
改版: