本文内容从Poi-tl官方文档摘录,poi-tl是一个基于Java POI的Word模板引擎,有着非常强大的功能

此处只摘录了一些我现在需要用到的功能

文章目录

  • 一、简单示例
    • 1.准备一个模板文档 `template.docx`
    • 2.写一个测试方法
  • 二、标签
    • 1.文本
    • 2.列表
    • 3.区块对
      • 区块对应用范围
        • False或空集合
        • 非False且不是集合
        • 非空集合
      • 循环内置变量
    • 4.嵌套
  • 三、配置
    • 1.前后缀
    • 2.标签类型
    • 3.标签正则
    • 4.计算标签值
    • 5.Spring表达式
    • 6.SpringEL作为区块对的条件
    • 7.错误处理
      • 标签无法被计算
      • 标签数据类型不合法
    • 8.模板生成模板

一、简单示例

1.准备一个模板文档 template.docx

在文档中写上{{title}}

2.写一个测试方法

public class PoiTlTest01 {@Testpublic void testStart() throws IOException {XWPFTemplate template = XWPFTemplate.compile("template.docx").render(new HashMap<String,Object>(){{put("title","Hi,poi-tl Word模板引擎");}});template.writeAndClose(new FileOutputStream("output.docx"));}
}

二、标签

1.文本

{{var}}

数据模型:

String 文本
TextRenderData 有样式的文本
HyperlinkTextRenderData 超连接文本
Object 调用toString()方法转换为文本

代码示例:

put("name", "Sayi");
put("author", new TextRenderData("000000", "Sayi"));
put("link", new HyperlinkTextRenderData("website", "http://deepoove.com"));
put("anchor", new HyperlinkTextRenderData("anchortxt", "anchor:appendix1"));

除了使用上面这这种new方法,还可以使用链式调用,使用更优雅的Text来构建文本模型

put("name", "Sayi");
put("author", Texts.of("Sayi").color("000000").create());
put("link", Texts.of("website").link("http://deepoove.com").create());
put("anchor", Texts.of("anchortxt").anchor("appendix1").create());

TextRenderData的结构体

{"text": "Sayi","style": {"strike": false,  // 删除线"bold": true,  // 粗体"italic": false,  // 斜体"color": "00FF00",  // 颜色"underLine": false,  // 下划线"fontFamily": "微软雅黑",  // 字体样式"fontSize": 12,  // 字体大小"highlightColor": "green",  // 背景高亮色"vertAlign": "superscript",  // 上标或者下标"characterSpacing" : 20  // 间距}
}

文本之间换行使用\n

2.列表

列表标签以*开始:{{*var}}
数据模型:

  • NumberingReanderData
    推荐使用工厂Numberings构建编号模型

示例代码:

put("list", Numberings.create("Plug-in grammar","Supports word text, pictures, table...","Not just templates"));

编号样式支持罗马字符、有序无序等,可以通过Numberings.os(NumberingFormat)来指定

DECIMAL //1. 2. 3.
DECIMAL_PARENTHESES //1) 2) 3)
BULLET //● ● ●
LOWER_LETTER //a. b. c.
LOWER_ROMAN //i ⅱ ⅲ
UPPER_LETTER //A. B. C.

3.区块对

区块对由前后两个标签组成,开始标签以?标识,结束标签以/标识,如:

{{?sections}}{{/sections}}

区块对应用范围

区块对开始和结束标签中间可以包含以下内容:

  • 多个图片
  • 表格
  • 段落
  • 列表
  • 图表
  • 等…

其中开始和结束标签可以跨多个段落,也可以在同一个段落,但是如果在表格中使用区块对,开始和结束标签必须在同一个单元格内,因为跨多个单元格的渲染行为是未知的
区块对在处理一些列文档元素的时候非常有用,位于区块对中的文档元素可以被渲染零次,一次或N次,这取决于区块对的取值。

False或空集合

隐藏区块中的所有文档元素
如果区块对的值是null、false或者空的集合,位于区块中的所有文档元素将不会显示,等同于if语句的条件为false
如下:


data-model{"announce": false
}------template.docxMade it,Ma!{{?announce}}Top of the world!{{/announce}}Made it,Ma!{{?announce}}Top of the world!												

Java Word模板引擎-Poi-tl相关推荐

  1. Word 模板引擎 poi-tl

    poi-tl基于Microsoft Word模板和数据生成新的Word文档,可能是Java中最好的Word模板引擎 全方位支持Word批注功能 图片支持SVG.Base64,支持自动识别各种图片类型 ...

  2. 排名第一的word模板引擎,到底有多神仙

    hello大家好,今天我要给大家推荐一个非常棒的Word专用的模板引擎,Poi-tl(Poi-template-language).这款引擎基于Apache Poi,可以根据用户输入的内容直接生成相应 ...

  3. poi-tl——Word模板引擎应用

    poi-tl(poi template language)是基于Apache POI的Word模板引擎.纯Java组件,跨平台,代码短小精悍,通过插件机制使其具有高度扩展性.支持DOCX格式的Word ...

  4. Word模板引擎poi-tl

    文章目录 ◆ 方案对比 ◆ 版本 ◆ 特性 ◆ 模板 ◆ 数据 ◆ 输出 ◆ 数据模型 ◆ 标签 1. 文本 2. 图片 3. 表格 4. 列表 5. 嵌套 6. 区块对 ◆ SpingEL 2. 单 ...

  5. java word - 2:POI开发流程

    接上文,本章介绍下POI的开发流程 不同于Freemarker那样将模板和数据分离的方式,POI是没有模板的,模板和数据是糅合在一起的. POI的开发流程其实网上教程都比较多了,我这边就将我写好的工具 ...

  6. java word转html 乱码 poi,java word转html poi

    java word转html poi [2021-01-29 15:50:39]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&q ...

  7. java velocity是什么意思_基于 Java 的模板引擎Velocity快速入门

    最近使用Velocity模板引擎,写一个maven项目Coding生成工具. 对基于Java的模板引擎Velocity的demo总结如下: Step1. 创建Maven项目,添加如下velocity的 ...

  8. Java开源模板引擎

    Velocity Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象 ...

  9. .NET Word模板引擎--MiniWord,继MiniExcel后又一开源作品!

    Part1简介 MiniWord 是.NET Word模板引擎,由Word模板和数据,简单.快速生成文件. Part2特点 .NET Word(docx) 模版导出引擎不需要安装 Office COM ...

最新文章

  1. docker管理平台 shipyard安装
  2. FZU - 2268 Cutting Game
  3. cogs 547:[HAOI2011] 防线修建
  4. 大疆无人机高程不准_大疆消费级无人机快速倾斜摄影测量实践
  5. 数据结构上机实验之二分查找
  6. codeforces CF986C AND Graph 建圖 dfs
  7. C++之临时对象、常引用和浅拷贝探究
  8. SushiSwap将于5月17日上线IDO平台Miso
  9. 便签pc android同步,Windows/iPhone/Android多端同步便签软件
  10. linux目录更改权限不够,Linux中文件夹访问权限不足
  11. 2022 年年度最佳开源软件
  12. Make Cents? Gym - 101350M (水)
  13. mysql cbrt函数_Hive FUNCTIONS函数
  14. 网络地址转换----NAT
  15. CAN光纤转换器,光纤转can模块使用说明
  16. 跨站脚本攻击漏洞(XSS):基础知识和防御策略
  17. Java面试题——数据库的优化
  18. Jvm sandbox mock机制实践
  19. 《白日梦想家》影评笔记
  20. Git add 、commit后报错:nothing to commit, working tree clean

热门文章

  1. 【历史上的今天】7 月 31 日:“缸中之脑”的提出者诞生;Wi-Fi 之父出生;USB 3.1 标准发布
  2. CAS虚拟化高级故障排查指导
  3. 由于文件不可访问,或者内存或磁盘空间不足,所以无法打开数据库 ‘msdb‘。无法打开数据库msdb 恢复操作已将该数据库标记为SUSPECT
  4. 开发一个android桌面
  5. 在NP下用OD调试游戏的方法
  6. 怎样给windows服务器传文件,windows服务器怎么远程传文件
  7. modern php_使用Modern.IE改善WordPress主题开发
  8. SQLServer 计算两个日期间的工作日(排除周六和周日,不排除节假日)
  9. 【Swift】第9周 小说列表展示案例
  10. 信息安全工程师笔记-网站安全需求分析与安全保护工程