ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java操作生成Word

2021-09-17 16:01:05  阅读:199  来源: 互联网

标签:Word hashMap 生成 tl poi put Java 模板


Java操作生成Word(poi-tl实现)

前言

最近有个生成Word报告的需求,把数据统计出来然后以Word的形式展示。在网上找了一些实现的技术,包括apache poi和FreeMarker,但两者对于生成word都有些许不够。apache poi提供Java程序对Microsoft Office格式档案读和写的功能,但使用起来很繁琐,操作自由度高,需要自己设计风格以便于维护。FreeMarker以模板引擎的思想,简单易用,对于HTML和XML的操作还好,但Word操作起来并不方便。最后找到了poi-tl。它是Word模板引擎,使用Word模板和数据创建出Word文档。底层封装了apache poi提供更简单易用的Api操作。

一、特点

poi-tl能够支持常见的文本、图片、表格、列表、图表等基本Word内容处理。除此之外还有其他一些代码高亮、Word批注、书签、锚点、超链接、文本框、模板嵌套、用户自定义函数(插件)等等。

poi-tl的运行逻辑是TDO模式Template + data-model = output

即:编译模板+数据模型 通过渲染 得到结果。

具体可查看:

Template:模板

Data-model:数据

Output:输出

二、快速入门

1、Maven依赖

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

新建Word模板template.docx,包含内容{{var}}

{{}}内的内容可自定义

// 模板加载和渲染
XWPFTemplate template = XWPFTemplate.compile("template.docx").render(
  // 数据模型
  new HashMap<String, Object>(){{
    put("var", "Hi, poi-tl Word模板引擎");
}});  
// 输出文档
template.writeAndClose(new FileOutputStream("output.docx")); 

这样就能完成一个简单的文档渲染。

三、案例演示

使用一个案例来说明如何使用poi-tl

1、我们先创建一个template模板,即E:\ComTemp\测试生成word\模板test.docx。这是创建的路径。

image-20210917153059821

2、制作数据模型

直接看代码

File fileTempl = new File("E:\\ComTemp\\测试生成word\\模板test.docx");

// 制作数据模型
HashMap<String, Object> hashMap = new HashMap<>();
// 文本
hashMap.put("title", "Hi, poi-tl Word模板引擎");
hashMap.put("name", "Sayi");
超链接和锚点文本:
hashMap.put("link", Texts.of("website").link("http://deepoove.com").create());
hashMap.put("anchor", Texts.of("anchortxt").anchor("appendix1").create());


// 网络图片(注意网络耗时对系统可能的性能影响)
hashMap.put("urlImg", Pictures.ofUrl("http://deepoove.com/images/icecream.png").size(100, 100).create());
// 网络图片(注意网络耗时对系统可能的性能影响)


// 表格
// 第0行居中且背景为蓝色的表格
RowRenderData row0 = Rows.of("姓名", "学历").textColor("FFFFFF")
    .bgColor("4472C4").center().create();
RowRenderData row1 = Rows.create("李四", "博士");
hashMap.put("table", Tables.create(row0, row1));

// 区块对  后续有说明
hashMap.put("person", true);


// 工厂 Charts 构建图表模型
ChartMultiSeriesRenderData chart = Charts
    .ofMultiSeries("ChartTitle", new String[] { "中文", "English" })
    .addSeries("countries", new Double[] { 15.0, 6.0 })
    .addSeries("speakers", new Double[] { 223.0, 119.0 })
    .create();
hashMap.put("barChart", chart);

3、执行渲染输出文档

// 加载模板渲染数据
XWPFTemplate template = XWPFTemplate.compile(fileTempl).render(hashMap);
// 输出结果
template.write(new FileOutputStream("E:\\ComTemp\\测试生成word\\output.docx"));
template.close();

得到结果

image-20210917153541680

说明

图片的渲染使用{{@…}

表格:{{#…}}

区块对:

区块对开始和结束标签中间可以包含多个图片、表格、段落、列表、图表等。根据区块对的布尔逻辑去展示数据。有以下几种:

  • False或空集合

隐藏区块中的所有文档元素

  • 非False且不是集合

显示区块中的文档元素,渲染一次

  • 非空集合

根据集合的大小,循环渲染区块中的文档元素

图表:

文档的图表是如何与数据模板关联的?答案是文本选线中指定标签名称。

image-20210917154223105

以上介绍了简单的基本poi-tl使用,事实上如果按需求不同,poi-tl还有很多操作word的方法。需要更多操作可以查看官方文档包括文本的样式,表格样式,插件功能、EL表达式等等,极力推荐。写的全面。

http://deepoove.com/poi-tl

参考或相关文章

http://deepoove.com/poi-tl

标签:Word,hashMap,生成,tl,poi,put,Java,模板
来源: https://blog.csdn.net/hwh295/article/details/120350821

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有