听过poi自然也要知道poitl是啥

632 阅读2分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」

前言

  • 之前项目中需要使用到模板导出文件。当时考虑最终导出的效果比较麻烦而且是word格式的文件,所以选择了freemark导出文件。
  • 机缘巧合下发现poi推出了新技能poitl. 个人理解他的全称应该是poi+ftl。数据我之前freemark导出文件的都知道freemark是模板技术,这里的模板就是ftl文件。所以poitl这里模板也是基于ftl来进行的。

介绍


  • 官网也有提到freemarker并且指出去功能仅支持文本这里是片面的。在我之前封装的office-multlp中就完美的支持以下功能
  1. 文本填充
  2. 图片填充
  3. 多选框勾选填充
  4. 列表填充
  5. 默认值填充
  • 并且基于上面的特性完美的绘制出项目中复杂的模板导出文件。但是这些都不重要,今天我们重点是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}}表示这个地方会动态获取数据中对应的同名内容。