文档章节

Java动态替换word模板的最佳实践

Zuo_W
 Zuo_W
发布于 2017/06/08 21:02
字数 613
阅读 829
收藏 1

poi-tl

基于word的模板渲染(替换)组件
对docx格式的文档增加模板语法,增加渲染模板的方便性,目前支持对段落、页眉、页脚、表格的文本、图片、表单渲染。

对于word模板替换,我们不仅要考虑复杂的模板格式,还要考虑字体,颜色,处理页眉页脚,使用稍显复杂的poi的API等,现实项目中又有许多需求需要后台动态生成数据然后替换word模板,供前台下载或者打印,为了避免:

  • java操作word使用poi的复杂性
  • 转化为xml操作word的难度
  • 依赖服务器上安装软件openoffice来调用转化
  • 依赖windows的word库,不具有跨平台性

因此基于poi开发了一套拥有简洁API的跨平台的模板引擎:poi-tl

文档

poi-tl:poi template language 一个基于poi的word模板生成文档的开源组件。
文档介绍:http://deepoove.com/poi-tl/
GitHub地址:https://github.com/Sayi/poi-tl
代码地址:见github的junit测试用例

Change log

v1.0.0

  1. 以插件的思想进行了重新设计
  2. 高度扩展性:语法即插件,像新增插件一样新增语法
  3. 新增工具类BytePictureUtils,便于操作图片的byte[]数据
  4. 新增Annotation @Name
  5. NiceXWPFDocument新增插入段落insertNewParagraph方法
  6. 新增代码生成工具类CodeGenUtils

V0.0.5

  1. bugfix: 解决0.0.4版本解析模板时CTSignedTwips类加载不到的问题
  2. new feature: 新增列表语法*,支持对有序列表和无序列表的插入

V0.0.4

  1. 增加新的api:XWPFTemplate.compile
  2. 渲染数据除了支持Map以外,还支持JavaBean渲染
  3. 升级poi组件至最新版本3.16

V0.0.3

  1. 新增表单语法#
  2. 支持表单插入
  3. 渲染器支持对table动态处理DynamicTableRenderPolicy
  4. 支持单元格的合并
  5. 丰富文本样式

使用

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

示例-Map渲染

Map<String, Object> datas = new HashMap<String, Object>(){{
        put("author", new TextRenderData("000000", "Sayi"));
        put("date", "2015-04-01");
        put("logo",  new PictureRenderData(100, 100, "/Users/Sayi/image.png"));
}};

//render
XWPFTemplate template = XWPFTemplate.compile("src/test/resources/PB.docx").render(datas);;

//out document
FileOutputStream out = new FileOutputStream("out.docx");
template.write(out);
template.close();
out.close();

示例-JavaBean渲染

DataSourceTest obj = new DataSourceTest();
obj.setHeader_version("v0.0.3");
obj.setHello("v0.0.3");
obj.setWebsite("http://www.deepoove.com/poi-tl");
obj.setLogo(new PictureRenderData(100, 120, "src/test/resources/logo.png"));
obj.setTitle(new TextRenderData("9d55b8",
			"Deeply in love with the things you love,\\n just deepoove."));
	
	
XWPFTemplate template = XWPFTemplate.compile("src/test/resources/PB.docx").render(obj);

FileOutputStream out = new FileOutputStream("out.docx");
template.write(out);
template.close();
out.flush();
out.close();

渲染图

输入图片说明 输入图片说明 输入图片说明 输入图片说明

© 著作权归作者所有

Zuo_W
粉丝 8
博文 23
码字总数 11094
作品 0
南京
程序员
私信 提问
java导出、打印、下载word文档的最佳方法?

有个需求,就是将数据生成word文档,然后导出下载打印。word文档是设计师做的一套非常漂亮的模板,我尝试以下几个方法,都不够完美。 1.无非是java操作word,使用POI等,参见http://stackove...

Just-Me
2015/07/13
10K
11
使用freemarker生成word文档

项目有时候需要将一些内容导出成word格式,实现方式很多种,如:POI导出,freemarker导出。freemarker导出比较简单。 主要分三步: 新建一个word文档 生成模板 动态生成word。 新建一个word文...

leesama
2014/05/01
0
3
动态替换word模板内容思路

1.用户有这么一个需求: 到月度、季度、年度总结的时候,领导下发一个工作总结模板,等所有下属单位填写完成后,系统会将所有的word文件汇总到一个word文件中。 2.他们现在的做法是: 领导用...

AndroidV5
2016/01/06
1K
14
FreemarkerJavaDemo【Android将表单数据生成Word文档的方案之一(基于freemarker2.3.28,只能java生成)】

版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个方案只能在java中运行,无法在Android项目中运行。所以此方案是:APP将表单数据发送给后台,后台通过freemarker将表单数据根...

HaiyuKing
04/26
0
0
使用卓正PageOffice--动态创建数据区域

WordDocument对象的CreateDataRegion方法是为了实现用程序动态的在Word文档中添加一个数据区域而设计的,使用此方法可以在生成Word文档的时候更灵活,支持更多复杂格式的文件生成。 CreateDa...

山里的红杏
2018/09/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 你一辈子都不可能跟她这么亲近

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享George Benson的单曲《Six Play》: 《Six Play》- George Benson 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
24分钟前
110
4
优雅的关闭Spring Boot

优雅的关闭Spring Boot 1、实现 TomcatConnectorCustomizer 接口拿到Tomcat的连接获取 Tomcat连接池 2、实现 ApplicationListener<ContextClosedEvent> 监听服务器关闭事件,注册JVM钩子函数...

sowhat
今天
2
0
Python3-Web开发

简介 Web开发框架 什么是Web框架? Web应用程序框架或简单的Web框架表示一组库和模块,使Web应用程序开发人员能够编写应用程序,而不必担心协议,线程管理等低级细节。 virtualenv是一个虚拟...

wuxinshui
今天
4
0
使用技媒体实践编写发布博客

技媒体实践博客 CSDN OSChina 知乎 简书 思否 掘金 51CTO

晨猫
今天
2
0
Lucene

1、什么是全文检索 数据分类 我们生活中的数据总体分为两种:结构化数据和非结构化数据。 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。 非结构化数据:指不定长或无固...

榴莲黑芝麻糊
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部