📝 Word 模板引擎,基于Apache poi,目标是在文档的任何地方做任何事情(Do Anything Anywhere)。
下表对一些处理Word的解决方案作了一些比较:
方案 | 跨平台 | 样式处理 | 易用性 |
---|---|---|---|
Poi-tl | 纯Java组件,跨平台 | ✅ 不需要编码,模板即样式 | ✅ 简单:模板引擎,对POI进行封装,支持Word文档合并、表格处理等 |
Apache POI | 纯Java组件,跨平台 | 编码 | 简单,没有模板引擎功能 |
Freemarker | XML操作,跨平台 | 无 | 复杂,需要理解XML结构,基于XML构造模板 |
OpenOffice | 需要安装OpenOffice软件 | 编码 | 复杂,需要了解OpenOffice的API |
Jacob、winlib | Windows平台 | 编码 | 复杂,不推荐使用 |
v1.6.0为最新版本,要求JDK1.8+、Apache poi4.0.0+:
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.6.0</version>
</dependency>
v1.5.1是构建在JDK1.6+、Apache poi3.16+上的版本:
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.5.1</version>
</dependency>
从一个超级简单的例子开始:把{{title}}替换成"Poi-tl 模板引擎"。
- 新建文档template.docx,包含文本{{title}}
- TDO模式:Template + data-model = output
//核心API采用了极简设计,只需要一行代码
XWPFTemplate.compile("template.docx").render(new HashMap<String, Object>(){{
put("title", "Poi-tl 模板引擎");
}}).writeToFile("out_template.docx");
关于Apache POI的使用,这里有个入门教程:Apache POI Word(docx) 入门示例教程,更多的示例以及所有示例的源码参见JUnit单元测试。
模板和插件丰富了Poi-tl的想象力。 整体设计采用Template + data-model = output
模式,Configure提供了配置功能,Visitor提供了解析功能,RenderPolicy是渲染策略扩展点,Render模块提供了RenderDataCompute标签表达式计算扩展点,通过插件对每个标签进行渲染。
参见常见问题,欢迎在GitHub Issue中提问和交流。
社区交流讨论群:Gitter频道