SpringBoot + Poi-tl操作word,快速生成报表

前段时间做了一个需求:需要快速生成一份数据报告,里面包含了文字、图片和数据报表,同时生成的图形数据也可以随意修改。之前想着使用Apache POI来进行实现,在翻阅一些资料后,发现poi-tl更适合我们的业务,也更容易上手,于是对其进行了研究、也对其中的一些标签进行了封装,形成一个快速实现的工具类。

废话不多说,直接开撸。

1、Poi-tl简介

poi-tl是一个免费开源的Java类库,是基于Apache POI的模板引擎,纯Java组件,跨平台,代码短小精悍,通过插件机制使其具有高度扩展性。

因此在使用的时候需要实现设置好模板,就像Freemarker一样,但是比其简单,也易操作。

2、常用标签

2.1 文本

格式:{ {var}}

数据模型:

类型

描述

String

纯文本

TextRenderData

带有样式的文本

HyperLinkTextRenderData

超链接文本

Object

调用toString()方法转化成文本

例如:

java复制代码put("name", "Sayi");
put("author", new TextRenderData("000000", "Sayi"));
// 超链接
put("link",
  new HyperLinkTextRenderData("website", "http://deepoove.com"));

2.2 图片

格式:以@开始,{ {@var}}

数据模型:

类型

描述

PictureRenderData

可以支持本地图片、也可以支持远程的URL地址(主要讲URL图片转成BufferedImage)

例如:

java复制代码/ 本地图片
put("local", new PictureRenderData(80, 100, "./sayi.png"));

// 图片流
put("localbyte", new PictureRenderData(80, 100, ".png", new FileInputStream("./logo.png")));

// 网络图片(注意网络耗时对系统可能的性能影响)
put("urlpicture", new PictureRenderData(50, 50, ".png", BytePictureUtils.getUrlBufferedImage("http://deepoove.com/images/icecream.png")));

2.3 表格

poi-tl默认实现了N行N列的样式(如下图),同时提供了当数据为空时,展示一行空数据的文案。

格式:以#开头,{ {#var}}

数据模型:

类型

描述

MiniTableRenderData

该类主要也是调用TextRenderData,提供样式等

2.4 列表

格式:以*开头,{ {*var}}

数据模型:

类型

描述

NumbericRenderData

该类主要也是调用TextRenderData,提供样式等

NumbericRenderData中支持列表样式,主要有罗马字符、有序无序等。

FMT_DECIMAL //1. 2. 3.

FMT_DECIMAL_PARENTHESES //1) 2) 3)

FMT_BULLET //● ● ●

FMT_LOWER_LETTER //a. b. c.

FMT_LOWER_ROMAN //i ⅱ ⅲ

FMT_UPPER_LETTER //A. B. C.

2.5 单系列图表

单系列图标,是指在图形中只展示一列数据,例如:单数据的柱状图,饼图等。

格式:先创建单系列图,然后在图表区格式 ->可选文字->标题。与文字一样,以{ {val}},如图:

数据模型:

类型

描述

ChartSingleSeriesRenderData

该类提供了设置标题、类别等

例如:

java复制代码ChartSingleSeriesRenderData singleSeriesRenderData = new ChartSingleSeriesRenderData();
singleSeriesRenderData.setCategories(new String[] { "俄罗斯", "加拿大", "美国", "中国" }");
singleSeriesRenderData.setChartTitle("测试");
pie.setSeriesData(new SeriesRenderData("countries", new Integer[] { 17098242, 9984670, 9826675, 9596961 }));

2.6 多系列图表

在报表应用中,很多时候使用的是多系列组合,例如:柱状图与折线图组合等。

格式:与单系列一致。

数据模型:

类型

描述

ChartMultiSeriesRenderData

该类提供了设置标题、类别等

例如:

java复制代码ChartMultiSeriesRenderData chart = new ChartMultiSeriesRenderData();
chart.setChartTitle("MyChart");
chart.setCategories(new String[] { "中文", "English" });
List<SeriesRenderData> seriesRenderData = new ArrayList<>();
seriesRenderData.add(new SeriesRenderData("countries", new Double[] { 15.0, 6.0 }));
seriesRenderData.add(new SeriesRenderData("speakers", new Double[] { 223.0, 119.0 }));
chart.setSeriesDatas(seriesRenderData);

3、代码封装

上述我们介绍了几种常用标签,更多的标签大家可以参考官方网站。

既然我们已经知道标签,那我们来进行代码的整合,主要是封装一个工具类,快速实现多标签一起生成报表。

引入jar包,我们以1.8.2版本为例:

xml复制代码<dependency>
    <groupId>com.deepoove</groupId>
    <artifactId>poi-tl</artifactId>
    <version>1.8.2</version>
</dependency>

3.1 创建标签类型

标签类型指程序中支持哪些标签,例如:文字,图片等。使用一个枚举来实现,方便后期进行扩展。

java复制代码/**
 * @author: jiangjs
 * @description: 标签类型
 * @date: 2022/11/24 13:44
 **/
public enum WordContentTypeEnum {
    /**
     * 文本
     */
    TEXT,
    /**
     * 图片
  
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值