Word 模板渲染引擎-Poi-tl

2 篇文章 0 订阅

在文档的任何地方做任何事情(Do Anything Anywhere)是poi-tl的星辰大海.

我们经常会遇到需要定时生成, 发送一些文档的需求, 比如: 简历在线生成, 重要天气预报报告等. 但是手动撰写, 手动发送又特别麻烦, 如果能够自动化生成目标文档, 再自动发送, 那将会给业务人员带来极大的便利. 而 Poi-tl 就是为此而生.

file

1. poi-tl 简介

poi-tl(poi template language)是Word模板引擎,使用Word模板和数据创建很棒的Word文档.
poi-tl 的工作模式为: Template + data-model = output

1.1 为什么选用 poi-tl

poi-tl是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库,你可以非常方便的加入到你的项目中,并且拥有着让人喜悦的特性。
这是官方给出的几种解决方案的对比

file

1.2 特性

目前, poi-tl 已经支持了以下特性:

file

2. Hello Word - YYDS

2.1 引入依赖

<dependency>
  <groupId>com.deepoove</groupId>
  <artifactId>poi-tl</artifactId>
  <version>1.11.1</version>
</dependency>

2.2 创建模板

新建一个 word 模板文档 textTemplate.docx (Office, WPS均可), 如下:

file

2.3 渲染模板

@Test
void textRender() throws Exception {
   // 模板文件
   final ClassPathResource templateResource
      = new ClassPathResource("textTemplate.docx");

   XWPFTemplate template = XWPFTemplate
      // 编译模板
      .compile(templateResource.getInputStream())
      // 渲染模板
      .render(
         // 渲染模板可以通过 Map 或者 POJO, 数据可以是树结构,每级之间用点来分隔开,比如{{author.name}}标签对应的数据是author对象的name属性值。 
         new HashMap<String, Object>() {
            {
               put("text", "Hello, 我是 poi-tl Word 文本模板");
            }
         }
      );

   // 输出文件
   final File outputFile = new File("/Users/dreamli/Workspace/MyRepository/javafamily/office-product/target/output.docx");

   if(!outputFile.exists()) {
      if(!outputFile.createNewFile()) {
         throw new RuntimeException("创建文件失败!");
      }
      else {
         log.info("在 {} 创建了新的文件.", outputFile.getAbsolutePath());
      }
   }

   // 写出渲染后的文件到指定文件
   template.writeAndClose(new FileOutputStream(outputFile));
}

2.4 查看

查看渲染后的文档如下:

file

3. 标签-Text 文本标签

poi-tl是一种无逻辑「logic-less」的模板引擎,没有复杂的控制结构和变量赋值,只有标签。标签由前后两个大括号组成,{{title}}是标签,{{?title}}也是标签,title是这个标签的名称,问号标识了标签类型.

poi-tl 支持多种标签, 限于篇幅, 本文先讲解 Text 文本标签, 后续持续更新其他标签.

3.1 文本标签模板

模板为:

{{text}}

3.2 数据模型

  • String :文本
  • TextRenderData :有样式的文本
  • HyperlinkTextRenderData :超链接和锚点文本
  • Object :调用 toString() 方法转化为文本

3.3 代码示例

put("text", "Hello, 我是 poi-tl Word 文本模板");
put("textRender", new TextRenderData("ff0000", "Render 文本"));
put("link", new HyperlinkTextRenderData("JavaFamily", "http://javafamily.club/"));
put("anchor", new HyperlinkTextRenderData("JavaFamilyAnchorText", "anchor:appendix1"));

除了new操作符,还提供了更加优雅的工厂 Texts 和链式调用的方式轻松构建文本模型。

put("text", "Hello, 我是 poi-tl Word 文本模板");
put("textRender", Texts.of("Render 文本").color("ff0000").create());
put("link", Texts.of("JavaFamily").link("http://javafamily.club/").create());
put("anchor", Texts.of("JavaFamilyAnchorText").anchor("anchor:appendix1").create());

3.4 TextRenderData的结构体

{
    "text":"Hello, 我是 poi-tl Word 文本模板",
    "style":{
        "strike":false, // 删除线
        "bold":false, // 加粗
        "italic":false, // 斜体
        "color":"FF0000", // 颜色
        "underLine":false, // 下划线
        "fontFamily":"微软雅黑", // 字体
        "fontSize":12, // 字号
        "highlightColor":"green", // 背景高亮色
        "vertAlign":"superscript", // 上标或下标
        "characterSpacing":20 // 间距
    }
}

文本换行使用 \n 字符。

3.5 创建模板

file

3.6 渲染结果

file

4. 下期继续

下期继续其他标签的渲染: 图片, 表格, 列表, 图等…敬请期待…哈哈哈…

file

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值