Java教程

Java操作生成Word

本文主要是介绍Java操作生成Word,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

这篇关于Java操作生成Word的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!