使用FreeMarker生成Word文档 -- 知识铺
因为需求要生成复杂的word,所以用模板实现下载
一:首先要创建一个word文档模板,将文档另存为xml格式保存,再把xml格式文件修改后缀为ftl文件。
word文档模板:
转ftl文件:直接将xml文件重命名
二:java后台主要代码
|
|
三:编辑ftl文件,获取动态值。
打开文件时无法下手修改,我是用的idea快捷键Ctrl + Alt + L(不区分大小写)将代码格式化,如果无效应该是快捷键冲突了,可以看看是不是网易音乐或者QQ等等其它软件快捷键。格式化之后就很好修改了,支持FreeMarker基本标签。
FTL常用标签及语法:
- 判断对象是否存在 。如: obj可以是任何类型的对象,像集合,实体类,属性等等
<#if obj??>…</#if>
<#if obj??> …<#else>…</#if>
或者
<#if obj?exists>…</#if>
<#ifobj?exists> …<#else>…</#if>- 判断是否和某一个值相等
<#if obj?exists && obj.id==1>…</#if>
<#if obj?exists && obj.id == 1>…<#else>…</#if>
注: 必须先判断是否存在,才可比较相等,如果该指定的参数不存在还比较相等的话就回出错;- 获取对象值
获取普通属性值:${(obj.属性名称)!} 或者 ${属性名称}
获取日期类值:${obj.属性名称?string(“yyyy-MM-dd HH:mm:ss”)}
获取金额类值(以数字20为例):
<#setting number_format=“percent”/> // 设置数字默认输出方式(‘percent’,百分比)
<#assign answer=20/> // 声明变量 answer 20
${answer?string} // 转换字符串输出 4,200%
${answer?string.number} // 转换数字输出 42
${answer?string.currency} // 转换货币输出 ¥42.00
${answer?string.percent} // 转换百分比输出 4,200%- 集合
遍历集合:
<#list empList! as emp>
${emp.name!}
</#list>
.
可以这样遍历集合:
<#list 0…(empList!?size-1) as i>
${empList[i].name!}
</#list>
.
与jstl循环类似,也可以访问循环的状态。
empList?size // 取集合的长度
emp_index: // int类型,当前对象的索引值
emp_has_next: // boolean类型,是否存在下一个对象
.
使用<#break>跳出循环
<#if emp_index = 0><#break></#if>
.
集合长度判断
<#if empList?size != 0></#if> // 判断=的时候,注意只要一个=符号,而不是==
四:最后运行看效果
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek001/post/20240507/%E4%BD%BF%E7%94%A8FreeMarker%E7%94%9F%E6%88%90Word%E6%96%87%E6%A1%A3--%E7%9F%A5%E8%AF%86%E9%93%BA/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com