poi-tl模板学习
一、什么是Poi-tl
Poi-tl是Word模板引擎,基于Word模板和数据生成新的文档。
二、应用场景
将所填写的页面表单转换成word文档,经常配合word预览、word打印等功能一起使用。
Poi-tl是页面表单传值给后端,通过自定义模板中提前设置好的标签注解渲染成对应的值,加载出带有数据的word文件。
三、能处理哪些word中的功能
Poi-tl功能很强大,基本可以处理大部分word中能够出现的功能展示,并且可以通过代码配置调整其中的样式、显示形式等个性化配置。
常用的功能有:
1.文本展示,将标签渲染为文本。
2.本地和网络图片等图片的展示,将标签渲染为图片。
3.表格展示,将标签渲染为表格。
4.列表展示,将标签渲染为列表。
5.各类图表的展示,包括条形图(3D条形图)、柱形图(3D柱形图)、面积图(3D面积图)、折线图(3D折线图)、雷达图、饼图(3D饼图)等图表渲染。
6.循环展示,循环某些文档内容(包括文本、段落、图片、表格、列表、图表等)。
四、具体实现方法
1.首先添加依赖
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.9.1</version>
</dependency>
2.模板
模板是Docx格式的Word文档,首先创建你需要创建的模板样式,填写你所需要的各种要素。
接着填写所有的要素标签时,都是以插值表达式的形式,即“{{XXX}}”。加入需要转化成具体值的地方,其中XXX对应实体类对应的字段名称。
2.1 文本模板
编写模板person.docx
编写实体类:
@Data
public class Person{
private String name;
private String age;
private Author gender;
}
编写对应输出方法:
import com.deepoove.poi.XWPFTemplate;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.*;
public class Test {
public static void main(String[] args) throws IOException {
Map<String, Object> data = new HashMap<>();
data.put("name", "小明");
data.put("age", "12");
data.put("gender","男");
XWPFTemplate template = XWPFTemplate.compile("D:/person.docx")
.render(data);
FileOutputStream out;
out = new FileOutputStream("D:/输出文档.docx");
template.write(out);
out.flush();
out.close();
template.close();
}
}
其中如果需要输出对象可以用对象"."属性的方法,即{{Test.testName}}进行填写标签。
输出的结果为:
poi-tl是一种 “logic-less” 模板引擎,没有复杂的控制结构和变量赋值,只有标签。标签由前后两个大括号组成, {{title}} 是标签, {{?title}} 也是标签, title 是这个标签的名称, ? 标识了标签类型。
常用的几种数据模板类:
数据模型:
String :文本
TextRenderData :有样式的文本
HyperLinkTextRenderData :超链接文本
Object :调用 toString() 方法转化为文本
所见即所得,标签的样式可以通过上述数据模型类型进行个性化的设定文本的样式。
{
"text": "XXX",
"style": {
"strike": boolean, 删除线
"bold": boolean, 粗体
"italic": boolean, 斜体
"color": "xxxx", 颜色
"underLine": boolean, 下划线
"fontFamily": "微软雅黑", 字体
"fontSize": number, 字号
"highlightColor": "blue", 背景高亮颜色
"vertAlign": "superscript" 上标或者下标
}
}
2.2 表格模板
表格标签以#开始:{{#模板字段}},默认实现了N行N列的样式,同时提供了当数据为空时,展示一行空数据的文案,数据模型是 MiniTableRenderData 。
public class Test1 {
public static void main(String[] args) throws IOException {
Map<String, Object> data = new HashMap<>();
RowRenderData header = RowRenderData.build(new TextRenderData("FF0000", "姓名"), new TextRenderData("FF0000", "年龄"));
RowRenderData row0 = RowRenderData.build("张三", "23");
RowRenderData row1 = RowRenderData.build("李四", "18");
data.put("table", new MiniTableRenderData(header, Arrays.asList(row0, row1)));
XWPFTemplate template = XWPFTemplate.compile("D:/table.docx")
.render(data);
FileOutputStream out;
out = new FileOutputStream("D:/输出表格.docx");
template.write(out);
out.flush();
out.close();
template.close();
}
}
模板表格:
输出表格效果为:
还可以进行个性化的定制,可以进行:
定义表格行数据,定义单元格数据,数据由 TextRenderData 指定 单元格样式:对齐方式,背景色 行样式:行数据的对齐方式,行背景色 定义表格头 没有数据的展示文案 表格样式:表格居左、居中、居右对齐 表格宽度等。
- 点赞
- 收藏
- 关注作者
评论(0)