沉舟侧畔千帆进,病树前头万木春。这篇文章主要讲述Java使用FreeMarker模版技术动态生成word实践相关的知识,希望能为你提供帮助。
一、序言
在日常开发中,常常有动态word文件生成的需求,通过编制模版,然后动态修改word内容以组合成新的文件。报告单、请假单、发票页等都可以使用动态生成word来解决。
笔者总结归纳出通用技术要点,尽可能降低广大开发者的使用技术门槛。
二、制作与渲染模版
(一)总体流程
1、准备数据通过查询数据库获取需要修改的数据,或者是调用远程API接口获得数据,数据准备完毕后,进入下一步。
2、制作word模版新建并设计出期望效果的word文档样式,包含字体、字号、段落样式布局等,先做出一个静态的word文件。
3、制作freemark模版在新建word模版的基础上,使用freemark语法,结合已经准备填充的数据结构,将需要动态变化的内容用变量表示。
用变量替换时常见的情形时对象属性和循环。
freemark模版制作完成后,保存为ftl后缀文件。
4、渲染字符串将数据和freemark模版组合,并且将前期制作的变量占位符替换,形成最终的word文件
(二)编码实践按照笔者提供的流程和SDK编码实践相对比较简单。
1、引入依赖如下依赖包含封装的工具方法,大幅降低使用门槛。
<
dependency>
<
groupId>
xin.altitude.cms<
/groupId>
<
artifactId>
ucode-cms-word<
/artifactId>
<
version>
1.5.6<
/version>
<
/dependency>
2、编码
/* 模拟准备数据 */
List<
HumanDemo>
data = https://www.songbingjia.com/android/TempUtils.readJsonList("HumanDemo.json", HumanDemo.class);
/* 将数据填充到模版中并生成word文档 */
DocUtils.fillWord("templates/HumanDemo.ftl", data);
从流程到编码实践比较简单。
三、内容拓展
上述分析的word生成如果页面结构较为简单,实现起来难度不大,假如涉及到如下情形,实现起来就会增加不少难度。
增加的困难主要来源于
页面布局复杂
、使用各种组件控件多
、多媒体资源
的引入。解决方法仍然参考上述流程。(一)复杂模版 1、多媒体资源布局
文章图片
当模版中需求多媒体(图片)内容,并且数量动态变化,位置不固定时,实现难度较大。
2、复杂内容布局
文章图片
当模版中包含文本,选择框,横向合并单元格、纵向合并单元格时,实现难度较大。
3、动态渲染表格
文章图片
涉及到动态渲染合并单元格时,实现难度较大。
(二)文件格式对于word文件格式有两种,一种是
.doc
后缀文件,一种是.docx
后缀文件,上述讨论属于前者,后者模版制作与生成比前者要复杂,将在后续的版本中提供API操作接口。.docx
后缀文件的word在转PDF方面兼容性比较好。(三)使用建议开发前,尽可能将模版布局确认,对于复杂页面结构修改需要增加较大投入
熟悉FreeMark语法、word文件结构将会对word模版开发受益
【Java使用FreeMarker模版技术动态生成word实践】多使用、多练将有助于制作出漂亮的文档
推荐阅读
- Harbor 2.5.1新版发布,赶紧升级尝尝鲜
- 优维低代码(构件事件传递)
- 同驱动编译相关的三类文件(MakefileConfig和Kconfig)
- 资金穿透分析
- 逆向调试入门-OllyDbg的使用
- 漫画趣解大数据算法建模(买瓜)
- MySQL数据库(29)(流程结构 if while)
- 基于grpc从零开始搭建一个准生产分布式应用 - 工程构建
- HarborHarbor镜像仓库