Word 模板渲染引擎-Poi-tl
在文档的任何地方做任何事情(Do Anything Anywhere)是poi-tl的星辰大海.
我们经常会遇到需要定时生成, 发送一些文档的需求, 比如: 简历在线生成, 重要天气预报报告等. 但是手动撰写, 手动发送又特别麻烦, 如果能够自动化生成目标文档, 再自动发送, 那将会给业务人员带来极大的便利. 而 Poi-tl 就是为此而生.
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类库,你可以非常方便的加入到你的项目中,并且拥有着让人喜悦的特性。
这是官方给出的几种解决方案的对比
1.2 特性
目前, poi-tl 已经支持了以下特性:
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均可), 如下:
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 查看
查看渲染后的文档如下:
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 创建模板
3.6 渲染结果
4. 下期继续
下期继续其他标签的渲染: 图片, 表格, 列表, 图等…敬请期待…哈哈哈…
Word 模板渲染引擎-Poi-tl相关推荐
- Word 模板渲染引擎-Poi-tl - 标签(二)
在文档的任何地方做任何事情(Do Anything Anywhere)是poi-tl的星辰大海. 上一节我们对 Poi-tl 进行了简单的介绍以及实现了我们永恒的 HelloWorld, 同时对 po ...
- poi-tl(word模板渲染)
poi-tl(poi-template-language) 序言 方案 移植性 功能性 易用性 Poi-tl Java跨平台 Word模板引擎,基于Apache POI,提供更友好的API 低代码,准 ...
- html模板渲染引擎有什么作用
你定义好一个模板.最简单的例子,例如<html> <div>{$what}</div> </html> 这只是一个模板.{$what}是数据.此时不知道 ...
- laytpl v1.1 独立版本 js模板渲染引擎
案例一: 数据 var data = {title: '前端圈',intro: '一群码js的骚年,幻想改变世界,却被世界改变.',list: [{name: '贤心', city: '杭州'}, { ...
- Django的模板渲染(render)机制
2019独角兽企业重金招聘Python工程师标准>>> 一旦你创建一个 Template 对象,你可以用 context 来传递数据给它. 一个context 是一系列变量和它们值的 ...
- poi tl 判断空值_使用poi-tl操作word模板
使用poi-tl操作word模板 1.导入jar包支持 com.deepoove poi-tl 1.8.2 2.建立word模板 在电脑E盘中建立word模板:"E:\templete.do ...
- 排名第一的word模板引擎,到底有多神仙
hello大家好,今天我要给大家推荐一个非常棒的Word专用的模板引擎,Poi-tl(Poi-template-language).这款引擎基于Apache Poi,可以根据用户输入的内容直接生成相应 ...
- poi-tl——Word模板引擎应用
poi-tl(poi template language)是基于Apache POI的Word模板引擎.纯Java组件,跨平台,代码短小精悍,通过插件机制使其具有高度扩展性.支持DOCX格式的Word ...
- Word模板引擎poi-tl
文章目录 ◆ 方案对比 ◆ 版本 ◆ 特性 ◆ 模板 ◆ 数据 ◆ 输出 ◆ 数据模型 ◆ 标签 1. 文本 2. 图片 3. 表格 4. 列表 5. 嵌套 6. 区块对 ◆ SpingEL 2. 单 ...
- Java Word模板引擎-Poi-tl
本文内容从Poi-tl官方文档摘录,poi-tl是一个基于Java POI的Word模板引擎,有着非常强大的功能 此处只摘录了一些我现在需要用到的功能 文章目录 一.简单示例 1.准备一个模板文档 ` ...
最新文章
- linux信号机制 - 用户堆栈和内核堆栈的变化【转】
- 程序员笔试面试基础知识资料整理
- 【GAN优化】详解SNGAN(频谱归一化GAN)
- PCB 电子线路板制作流程
- 在SAP C4C创建销售订单时如何绑定创建者的微信open id
- “苹果税”猛于虎惹众怒,库克:我们是不会让步的
- kali 安装volatility_电子取证技术之实战Volatility工具
- 文件服务器与数据库服务器,文件服务器和数据库服务器
- tspline工具_Rhino 6 如何使用 T-spline?
- 哈理工OJ-2277-喝喝
- 服务器硬盘整体ghost,ghost备份整个硬盘| 全盘镜像ghost步骤
- 倍福--检测和扫描ethercat从站状态
- 谷歌街景中路牌、广告等标识文字的识别(文本识别在自然场景下的应用)之文本识别分类器
- panabit之PPPoE认证
- coldfusion php,PHP加密代码转换为ColdFusion
- 月老在线牵盲盒/交友盲盒/一元交友/存取小纸条盲盒/分销功能
- AI轻松入门,AI零基础入门,AI初级教学,
- 廖雪峰python#统计学生人数
- html修改当前窗口大小,设置HTML页面和浏览器窗口的大小
- Java中关于length和length()的问题小结
热门文章
- 图片批量压缩工具免费版-免费的批量图片压缩工具
- 我的 Serverless 实战 — Serverless 腾讯云文字识别(OCR)详细部署过程
- 龙芯3A3000搭建分布式存储服务etcd
- PS第一集 证件照换底色
- NR接入过程中鉴权失败问题
- 腾讯云 鉴权失败,请确认服务器已启用密码鉴权并且账号密码正确? permission denied (publickey,gssapi-keyex,gssapi-with-mic)
- 水处理过滤器:常见水处理过滤器的种类大全
- 在word文档中添加上角标和下角标
- html让视频自动循环播放,javascript – HTML5视频 – 如何进行无缝播放和/或循环播放多个视频?...
- 【Excel】数据的排序、筛选和分类汇总