「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」
前言
- 之前项目中需要使用到模板导出文件。当时考虑最终导出的效果比较麻烦而且是word格式的文件,所以选择了freemark导出文件。
- 机缘巧合下发现poi推出了新技能
poitl. 个人理解他的全称应该是poi+ftl。数据我之前freemark导出文件的都知道freemark是模板技术,这里的模板就是ftl文件。所以poitl这里模板也是基于ftl来进行的。
介绍
- 官网也有提到
freemarker并且指出去功能仅支持文本这里是片面的。在我之前封装的office-multlp中就完美的支持以下功能
- 文本填充
- 图片填充
- 多选框勾选填充
- 列表填充
- 默认值填充
-
并且基于上面的特性完美的绘制出项目中复杂的模板导出文件。但是这些都不重要,今天我们重点是
poitl的深入浅出 -
仔细对比下
poitl的功能应该是区块对+嵌套这两个功能比较突出。在我自己的office-muitip中也有区块对和嵌套理念在里面但是并没有单独抽离出来。这个也是office-multip后面要引入的功能。下面我们也是按照官网的思路已这个角度来使用下poitl -
使用它很简单,只需要引入maven坐标就可以了
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.8.2</version>
</dependency>
快速入门
首先说明下我的项目结构,我是通过junit进行的单元测试。所以下面用到的模板文件我都是放在test->resources下的。生成的word文件也是实在target->test-resources下的同名2文件。比如我的模板放在test->resources下名叫template.docx,那么最终你会在项目的target->test-resources下找到一个template2.docx文件
-
为了保证不产生垃圾文件,所以我对上面官网demo进行改造。这样文件只会在target下,每次编译🧬之后就没了。
-
文本导出就是这样简单。我们只需要将需要用到的数据通过map或者实体搭载
XWPFTemplate来进行解析。在poi-tl中我们所有的占位符都称之为标签.而他的语法也很简单只需要通过{{}}来进行标识。像我们上面的模板就是{{title}}表示这个地方会动态获取数据中对应的同名内容。