前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java使用FreeMarker模版技术动态生成word实践

Java使用FreeMarker模版技术动态生成word实践

原创
作者头像
赛先生和泰先生
发布2022-06-14 10:15:13
1.9K0
发布2022-06-14 10:15:13
举报
文章被收录于专栏:Java知识图谱

一、序言

在日常开发中,常常有动态word文件生成的需求,通过编制模版,然后动态修改word内容以组合成新的文件。报告单、请假单、发票页等都可以使用动态生成word来解决。

笔者总结归纳出通用技术要点,尽可能降低广大开发者的使用技术门槛。

二、制作与渲染模版

(一)总体流程
1、准备数据

通过查询数据库获取需要修改的数据,或者是调用远程API接口获得数据,数据准备完毕后,进入下一步。

2、制作word模版

新建并设计出期望效果的word文档样式,包含字体、字号、段落样式布局等,先做出一个静态的word文件。

3、制作freemark模版

在新建word模版的基础上,使用freemark语法,结合已经准备填充的数据结构,将需要动态变化的内容用变量表示。

用变量替换时常见的情形时对象属性和循环。

freemark模版制作完成后,保存为ftl后缀文件。

4、渲染字符串

将数据和freemark模版组合,并且将前期制作的变量占位符替换,形成最终的word文件

(二)编码实践

按照笔者提供的流程和SDK编码实践相对比较简单。

1、引入依赖

如下依赖包含封装的工具方法,大幅降低使用门槛。

代码语言:html
复制
<dependency>
    <groupId>xin.altitude.cms</groupId>
    <artifactId>ucode-cms-word</artifactId>
    <version>1.5.6</version>
</dependency>
2、编码
代码语言:java
复制
/* 模拟准备数据 */
List<HumanDemo> data = TempUtils.readJsonList("HumanDemo.json", HumanDemo.class);
/* 将数据填充到模版中并生成word文档 */
DocUtils.fillWord("templates/HumanDemo.ftl", data);

从流程到编码实践比较简单。

到此为止,已经可以快速体验word生成技术了。

三、内容拓展

上述分析的word生成如果页面结构较为简单,实现起来难度不大,假如涉及到如下情形,实现起来就会增加不少难度。

增加的困难主要来源于页面布局复杂、使用各种组件控件多多媒体资源的引入。解决方法仍然参考上述流程。

(一)复杂模版
1、多媒体资源布局
6e985f4c610fd1d1c5c96e3a66ef28df.png
6e985f4c610fd1d1c5c96e3a66ef28df.png

当模版中需求多媒体(图片)内容,并且数量动态变化,位置不固定时,实现难度较大。

2、复杂内容布局
b96381b1ce970da9bfb0614d4733c57c.png
b96381b1ce970da9bfb0614d4733c57c.png

当模版中包含文本,选择框,横向合并单元格、纵向合并单元格时,实现难度较大。

3、动态渲染表格
21b75df46bab675f66912d3528dc43a7.png
21b75df46bab675f66912d3528dc43a7.png

涉及到动态渲染合并单元格时,实现难度较大。

上述复杂模版制作,笔者均有实践。

(二)文件格式

对于word文件格式有两种,一种是.doc后缀文件,一种是.docx后缀文件,上述讨论属于前者,后者模版制作与生成比前者要复杂,将在后续的版本中提供API操作接口。

.docx后缀文件的word在转PDF方面兼容性比较好。

(三)使用建议

开发前,尽可能将模版布局确认,对于复杂页面结构修改需要增加较大投入

熟悉FreeMark语法、word文件结构将会对word模版开发受益

多使用、多练将有助于制作出漂亮的文档


源码在GitHub ,视频讲解在B站 ,本文收藏在博客天地

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、序言
  • 二、制作与渲染模版
    • (一)总体流程
      • 1、准备数据
      • 2、制作word模版
      • 3、制作freemark模版
      • 4、渲染字符串
    • (二)编码实践
      • 1、引入依赖
      • 2、编码
  • 三、内容拓展
    • (一)复杂模版
      • 1、多媒体资源布局
      • 2、复杂内容布局
      • 3、动态渲染表格
    • (二)文件格式
      • (三)使用建议
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档