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

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();

渲染图

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

转载于:https://my.oschina.net/sayi/blog/917449

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值