OpenSource - Apache POI 的 Word 模板引擎 poi-tl

embedded/2025/3/14 22:39:00/

文章目录

  • 概述
  • 地址
  • Word模板引擎功能
  • Getting Started
    • 前提
    • Maven
    • Gradle
    • 2分钟入门
    • Template:模板
    • Data-model:数据
    • Output:输出

在这里插入图片描述


概述

该项目是基于 Apache POI 的 Word 模板引擎,可以动态生成 Word 文档。它提供了友好的 API,支持文本、图片、表格、条件渲染、图表等多种内容的渲染,适用于批量生成合同、报告、通知、证书等场景

在这里插入图片描述


地址

https://github.com/Sayi/poi-tl

https://deepoove.com/poi-tl/


Word模板引擎功能

功能描述
文本将标签渲染为文本
图片将标签渲染为图片
表格将标签渲染为表格
列表将标签渲染为列表
图表支持条形图(3D条形图)、柱形图(3D柱形图)、面积图(3D面积图)、折线图(3D折线图)、雷达图、饼图(3D饼图)、散点图等图表渲染
If Condition判断根据条件隐藏或者显示某些文档内容(包括文本、段落、图片、表格、列表、图表等)
Foreach Loop循环根据集合循环某些文档内容(包括文本、段落、图片、表格、列表、图表等)
Loop表格行循环复制渲染表格的某一行
Loop表格列循环复制渲染表格的某一列
Loop有序列表支持有序列表的循环,同时支持多级列表
Highlight代码高亮Word中代码块高亮展示,支持26种语言和上百种着色样式
Markdown将Markdown渲染为Word文档
Word批注完整的批注功能,创建批注、修改批注等
Word附件Word中插入附件
SDT内容控件内容控件内标签支持
Textbox文本框文本框内标签支持
图片替换将原有图片替换成另一张图片
书签、锚点、超链接支持设置书签,文档内锚点和超链接功能
Expression Language完全支持SpringEL表达式,可以扩展更多的表达式:OGNL, MVEL…​
样式模板即样式,同时代码也可以设置样式
模板嵌套模板包含子模板,子模板再包含子模板
合并Word合并Merge,也可以在指定位置进行合并
用户自定义函数(插件)插件化设计,在文档任何位置执行函数

Getting Started

前提

JDK1.8+
Apache POI5.2.2+

Maven

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

Gradle

implementation 'com.deepoove:poi-tl:1.12.2'

2分钟入门

新建Word文档template.docx,包含标签 {{title}}

template.docx
{{title}}

代码示例

XWPFTemplate template = XWPFTemplate.compile("template.docx").render(word">new HashMap<String, Object>(){{put("title", "Hi, poi-tl Word模板引擎");
}});   // 
template.writeAndClose(word">new FileOutputStream("output.docx")); 
  • compile 编译模板
  • render 渲染数据
  • write 输出到流
  • TDO模式:Template + data-model = output
output.docx
Hi, poi-tl Word模板引擎

Template:模板

模板是Docx格式的Word文档,你可以使用Microsoft office、WPS Office、Pages等任何你喜欢的软件制作模板,也可以使用Apache POI代码来生成模板。

所有的标签都是以{{开头,以}}结尾,标签可以出现在任何位置,包括页眉,页脚,表格内部,文本框等,表格布局可以设计出很多优秀专业的文档,推荐使用表格布局。

poi-tl模板遵循“所见即所得”的设计,模板和标签的样式会被完全保留。

Data-model:数据

数据类似于哈希或者字典,可以是Map结构(key是标签名称):

Map<String, Object> data = word">new HashMap<>();
data.put("name", "Sayi");
data.put("start_time", "2019-08-04");

可以是对象(属性名是标签名称):

word">public word">class Data {word">private String name;word">private String startTime;word">private Author author;
}

数据可以是树结构,每级之间用点来分隔开,比如{{author.name}}标签对应的数据是author对象的name属性值。

FreeMarker、Velocity文本模板中可以通过三个标签设置图片路径、宽和高:<img src="{{path}}" width="{{width}}" height="{{height}}">, 但是Word模板不是由简单的文本表示,所以在渲染图片、表格等元素时提供了数据模型,它们都实现了接口 RenderData ,比如图片数据模型 PictureRenderData 包含图片路径、宽、高三个属性。


Output:输出

以流的方式进行输出:

template.write(OutputStream stream);

比如文件流:

template.write(word">new FileOutputStream("output.docx"));

比如网络流:

response.setContentType("application/octet-stream");
response.setHeader("Content-disposition","attachment;filename=\""+"out_template.docx"+"\"");// HttpServletResponse response
OutputStream out = response.getOutputStream();
BufferedOutputStream bos = word">new BufferedOutputStream(out);
template.write(bos);
bos.flush();
out.flush();

最后不要忘记关闭这些流。

PoitlIOUtils.closeQuietlyMulti(template, bos, out);

在这里插入图片描述


http://www.ppmy.cn/embedded/172596.html

相关文章

机器学习模型-从线性回归到神经网络

在当今的数据驱动世界中&#xff0c;机器学习模型是许多应用程序的核心。无论是推荐系统、图像识别&#xff0c;还是自动驾驶汽车&#xff0c;机器学习技术都在背后发挥着重要作用。在这篇文章中&#xff0c;我们将探索几种基础的机器学习模型&#xff0c;并了解它们的基本原理…

Mysql_DML

1.DML概述&#xff1a; 英文全称为DataManipulationLanguage&#xff08;数据操作语言&#xff09;&#xff0c;用来对数据库中的表中的数据记录进行增删改的操作 2.基本操作 &#xff08;1&#xff09;.添加数据&#xff08;insert&#xff09; 在指定字段中添加数据&#…

FPGA基础 -- 仿真初识

什么是仿真&#xff08;Simulation&#xff09;&#xff1f; 在 FPGA 开发 中&#xff0c;仿真&#xff08;Simulation&#xff09; 是指在硬件电路真正部署到 FPGA 之前&#xff0c;通过 计算机软件 来模拟 FPGA 设计的功能和时序&#xff0c;以验证设计的正确性。仿真主要用…

手机屏幕摔不显示了,如何用其他屏幕临时显示,用来导出资料或者清理手机

首先准备一个拓展坞 然后 插入一个外接的U盘 插入鼠标 插入有数字小键盘区的键盘 然后准备一根高清线&#xff0c;一端链接电脑显示器,一端插入拓展坞 把拓展坞的连接线&#xff0c;插入手机充电口&#xff08;可能会需要转接头&#xff09; 然后确保手机开机 按下键盘…

Kotlin高效实现 Android ViewPager2 顶部导航:动态配置与性能优化指南

高效实现&#xff1a;强调代码的性能优化。Android ViewPager2&#xff1a;明确技术栈。顶部导航&#xff1a;核心功能点。动态配置与性能优化指南&#xff1a;突出动态配置的灵活性和性能优化的重点。 在 Android 开发中&#xff0c;使用 ViewPager2 实现高效的顶部导航&…

深度学习正则化技术之权重衰减法、暂退法(通俗易懂版)

一、影响模型泛性的因素有&#xff1f;什么是正则化技术&#xff1f;有什么用&#xff1f; 通常&#xff0c;影响模型泛化能力的因素有&#xff1a; 可调节参数的个数&#xff1a;可调节的参数过少&#xff0c;会造成模型过于简单&#xff0c;欠拟合&#xff1b;过多&#xf…

数据中心安全建设方案,数据安全运营体系建设方案,信息中心安全解决方案(PPT)

1. 项目简介 项目背景 项目建设思路 项目建设内容 项目建设目标 2. 技术平台建设方案 监控范围 平台架构 安全模型 部署示意图 详细方案 3. 人员流程制度建设方案 人员建设规划 流程建设规划 制度建设规划 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行…

【每日学点HarmonyOS Next知识】顶部状态栏、文本最大行数后缀、弹窗背景、状态栏颜色、导航

1、HarmonyOS 应用把顶部系统状态栏信息完全覆盖了&#xff1f; //设置窗口全屏模式时导航栏、状态栏的可见模式&#xff08;需全部显示&#xff0c;该参数设置为[status, navigation]&#xff0c;不设置&#xff0c;则默认不显示&#xff09; let names: Array<status | n…