poi-tl—一个超级好用开源的Word模板引擎

poi-tl是一个基于Apache POI的Word模板引擎,同时它也是一个免费开源(github地址)的Java类库,给Java程序员带来了word处理上的便捷。

2、官方介绍

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

2.1 poi-tl与其他word模板引擎的对比

| 方案 | 移植性 | 功能性 | 易用性 |

| — | — | — | — |

| Poi-tl | Java跨平台 | Word模板引擎 | 基于Apache POI,更友好的API |

| Apache POI | Java跨平台 | Apache项目,不仅封装了易用的文档API(文本、图片、表格、页眉、页脚、图表等),也可以在底层直接操作XML结构 | 文档不全,这里有一个教程:Apache POI Word快速入门 |

| Freemarker | XML跨平台 | 仅支持文本,很大的局限性 | 不推荐,需要维护XML结构,代码后期不可维护 |

| OpenOffice | 部署OpenOffice,移植性较差 | - | 需要了解OpenOffice的API |

| HTML浏览器导出 | 依赖浏览器的实现,移植性较差 | HTML不能很好的兼容Word的格式 | - |

| Jacob、winlib | Windows平台 | - | 复杂,完全不推荐使用 |

2.2 poi-tl的编码模式

TDO模式: Template + data-model = output

2.2.1 Template—模板

模板即Docx格式的Word文档

2.2.2 Data-model—数据

数据即模板中需要替换的数据结构,类似哈希或者字典,常用Map结构,其中key即需要替换的标签

2.2.3 Output—输出

输出即最终文档的流产生,可以是文件流或网络流等

3、软件要求
  • Apache POI 4.1.2

  • jdk 1.8+

maven依赖

com.deepoove

poi-tl

1.10.0

4、标签

4.1 文本

标签

{{var}}

数据模型

  1. String:文本

  2. TextRenderData:有样式的文本

  3. HyperlinkTextRenderData :超链接和锚点文本

  4. Object:调用 toString() 方法转化为文本

测试模板

在这里插入图片描述

测试代码

package com.lizba.poi;

import com.deepoove.poi.XWPFTemplate;

import com.deepoove.poi.data.Texts;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.HashMap;

/**

  •   文本测试
    
  • @Author: Liziba

  • @Date: 2021/6/24 21:49

*/

public class DocTest {

public static void main(String[] args) throws IOException {

String filePath = “D:\poi-tl\textTest.docx”;

String targetPath = “D:\poi-tl\textTestTarget.docx”;

XWPFTemplate template = XWPFTemplate.compile(filePath).render(

new HashMap<String, Object>() {

{

put(“name”, “测试”);

put(“author”, Texts.of(“Liziba”).color(“000000”).create());

put(“link”, Texts.of(“百度”).link(“https://baidu.com”).create());

put(“anchor”, Texts.of(“anchortxt”).anchor(“appendix1”).create());

}

});

template.writeAndClose(new FileOutputStream(targetPath));

}

}

测试结果

在这里插入图片描述

4.2 图片

标签

{{@var}}

数据模型

  1. String:图片url或者本地路径。默认使用图片自身尺寸

  2. PictureRenderData

测试模板

在这里插入图片描述

测试代码

package com.lizba.poi;

import com.deepoove.poi.XWPFTemplate;

import com.deepoove.poi.data.PictureType;

import com.deepoove.poi.data.Pictures;

import com.deepoove.poi.data.Texts;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.HashMap;

/**

  •   图片测试
    
  • @Author: Liziba

  • @Date: 2021/6/24 21:49

*/

public class PictureTest {

public static void main(String[] args) throws IOException {

String filePath = “D:\poi-tl\pictureTest.docx”;

String targetPath = “D:\poi-tl\pictureTest2.docx”;

String picPath = “D:\poi-tl\pic.jpg”;

XWPFTemplate template = XWPFTemplate.compile(filePath).render(

new HashMap<String, Object>() {

{

// 方法一、图片路径(原大小)

put(“picture”, picPath);

// 方法二、指定图片大小

put(“picture”, Pictures.ofLocal(picPath).size(420,350).center().create());

// 方法三、图片流

put(“picture”, Pictures.ofStream(new FileInputStream(picPath), PictureType.JPEG)

.size(420,350).create());

// 针对网络图片、SVG图片、Java图片都有处理

}

});

template.writeAndClose(new FileOutputStream(targetPath));

}

最后

在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。**

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-BIihKcxo-1715864047532)]

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,如果您要使用poi-tl导出Word文档并合并单元格,可以按照以下步骤进行操作: 1. 首先,准备一个Word模板文件,其中包含需要合并单元格的表格。可以使用MS Word或其他工具创建模板文件。在模板文件中,使用`${}`占位符来标识需要填充数据的位置,使用`#for`和`#end`标记来循环生成多行数据。示例模板文件如下: ``` 姓名\t性别\t年龄\t住址 #for(user in users) ${user.name}\t${user.gender}\t${user.age}\t${user.address} #end ``` 2. 在Java代码中,使用poi-tl模板引擎来加载模板文件,并将数据绑定到模板中。在模板中,使用`#merge`标记来指定需要合并的单元格区域。示例代码如下: ```java // 加载模板文件 InputStream is = new FileInputStream("template.docx"); XWPFTemplate template = XWPFTemplate.compile(is).render(new HashMap<String, Object>() {{ // 绑定数据 List<User> users = Arrays.asList( new User("张三", "男", 20, "北京"), new User("李四", "女", 22, "上海"), new User("王五", "男", 25, "广州") ); put("users", users); }}); // 获取表格并合并单元格 IBody body = template.getDocument().getBody(); List<XWPFTable> tables = body.getTables(); XWPFTable table = tables.get(0); // 假设第一个表格需要合并单元格 table.getRow(0).getCell(0).setText("姓名"); table.getRow(0).getCell(1).setText("性别"); table.getRow(0).getCell(2).setText("年龄"); table.getRow(0).getCell(3).setText("住址"); for (int i = 1; i <= 3; i++) { table.getRow(i).getCell(0).setText("#{" + "users[" + (i - 1) + "].name}"); table.getRow(i).getCell(1).setText("#{" + "users[" + (i - 1) + "].gender}"); table.getRow(i).getCell(2).setText("#{" + "users[" + (i - 1) + "].age}"); table.getRow(i).getCell(3).setText("#{" + "users[" + (i - 1) + "].address}"); } table.mergeCells(1, 1, 2, 2); // 合并单元格 // 导出文档 template.write(new FileOutputStream("output.docx")); template.close(); ``` 在模板中,使用`${}`占位符来引用数据对象的字段,使用`#merge`标记来指定需要合并的单元格区域。在Java代码中,使用`table.mergeCells()`方法来合并单元格,其中参数分别为起始行、起始列、结束行、结束列。在本例中,我们将第2行第2列到第3行第3列的单元格进行了合并。 希望这些信息能够对您有所帮助!如果您还有其他问题,请随时提出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值