Freemarker 的 ftl 格式模板制作
Siona
Freemarker 的 Ftl 模板介绍
FreeMarker 是一个基于 Java 的模板引擎,最初专注于使用 MVC 软件架构生成动态网页。 但是,它是一个通用的模板引擎,不依赖于 servlets 或 HTTP 或 HTML,因此它通常还用于生成源代码,配置文件或电子邮件。 此时,我们用它动态生成 xml 文件,进而导出 word 文档。

1. WPS 软件制作 ftl 模板
① Word 文档 ② 导出 xml 文件,修改其中的内容为 ${title} ③ 保存后,修改后缀名为 ftl,至此模板制作完毕
2. Java 代码制作 ftl 模板
生成图片
<pkg:part pkg:name="/word/media/image_1.jpeg" pkg:contentType="image/jpeg" pkg:compression="store">
<pkg:binaryData>${image}</pkg:binaryData>
</pkg:part>
遇到的问题
问题1
log4j:WARN No appenders could be found for logger (freemarker.cache).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
FreeMarker template error:
The following has evaluated to null or missing:
==> contract_number [in template "output2.ftl" at line 383, column 57]
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: ${contract_number} [in template "output2.ftl" at line 383, column 55]
----
原因:实体类中用的是驼峰命名法,而模板中是 ${contract_number} 解决方法:写了一个工具类,将该实体类中的驼峰 → 下划线,最终将 <String, Object> dataMap 传入生成 word 的方法
/**
* word 模板中的变量实体类
*/
@Data
public class FilePrintBO {
// private PersonBaseVO personBaseVO;
/**
* 合同编号
*/
private String contractNumber;
/**
* 采购方(甲方)
*/
private String partA;
ftl 模板生成 word 时警告 → 暂时不管,Tomcat 的问题
log4j:WARN No appenders could be found for logger (freemarker.cache).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
问题2

解决方案
在生成 word 时,将 ftl 中的关于标识的内容删除
<w:body>
<w:p>
<w:pPr/>
<w:r>
<w:rPr>
<w:color w:val="FF0000"/>
<w:sz w:val="24"/>
</w:rPr>
<w:t xml:space="preserve">Evaluation Warning: The document was created with Spire.Doc for
JAVA.</w:t>
</w:r>
</w:p>
<w:p>
... 其他内容
</w:p>
</w:body>