1.制作模板  将word文档中需要动态生成数据替换成${key},然后把Word文件另存为xml,然后最好格式化一下,然后另存为ftl文件。

2.修改模板内容 如果模板有一些table、单元格合并、图片显示、计算等需要根据freemaker标签进行修改,基本语法可以百度

3.后台数据值和模板中的key值对应即可,图片需要转为BASE64,然后将模板和数据模型合并成文件输出,还有别忘记设置好编码

 

问题:1.利用wps和Word生成的xml文件不一样。

           2.目前公司使用的模板为wps生成,图片显示需要三处对应。

freemarker 导出word 转换模板的xml文本输出了 freemarker导出word打不开_另存为

freemarker 导出word 转换模板的xml文本输出了 freemarker导出word打不开_另存为_02

freemarker 导出word 转换模板的xml文本输出了 freemarker导出word打不开_xml_03

 但是Word生成的xml模板图片处有一个<w:pict>标签下面有<w:binData w:name="wordml://03000001.png" xml:space="preserve">${key}</w:binData> 

将图片的base64编码放在此处即可。 

3.目前公司使用的wps生成的模板导出doc文件后,一般wps可以打开,有一款企业级wps打不开。Word打不开,需要另存为一下,文件类型选择microsoft word docx或者doc。直接使用Word生成模板能不能全部兼容目前没有测试。

4.一定要注意数据类型的问题,最好前后类型要一致。不然使用freemaker标签会频繁报错而且调试麻烦。

之前遇到一个问题,后台返回List<object>,object其实是一个map用于模板中的table显示,但当其中值有null时,后台转map遍历时不能直接!=null判断,null值转化字符串不报错变成了"null",但是freemaker中直接返回list<object>后null值Word单元格中直接显示为null,想在null时做一些操作时所有freemaker判断方法判断不出null值,想转化为字符串判断判断"null",freemaker报转化错误,类型不一致。最后在后台把返回改为list<map>变为正常,可以使用?? !等判断。

总结:1.感觉freemaker并不好用,还没开始的可以考虑Apache POI,感觉操作更简单些,调试也方便些。

2.<w:tbl>表示table <w:tr>表示table中的一行 <w:tc>代表每行的一个单元格 <w:p>每个可以表示一个单元格中的一列。

合并单元格使用<w:vMerge w:val="continue" />表示合并 <w:vMerge w:val="restart"/>表示另起新行。定义变量使用<#assign raning_flag = "">