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

本文介绍了如何使用SpringBoot结合Poi-tl库来操作word,生成包含文本、图片、表格、列表和图表的数据报告。详细阐述了Poi-tl的常用标签、代码封装过程以及测试步骤,提供了一个快速生成报表的工具类。

 前段时间做了一个需求:需要快速生成一份数据报告,里面包含了文字、图片和数据报表,同时生成的图形数据也可以随意修改。之前想着使用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,
  
内容概要:本文系统梳理了多个科研领域的前沿研究与技术实现,重点涵盖FDTD方法中的完美匹配层(PML)研究,以及Matlab/Simulink在电磁、电力、控制、通信、信号处理、图像处理、路径规划、能源系统优化等领域的仿真与算法实现。文中列举了大量基于Matlab和Python的科研案例,如风电功率预测、负荷预测、无人机三维路径规划、电池系统故障诊断、雷达模拟、通信编码、微电网优化调度等,强调结合智能优化算法(如粒子群、遗传算法、深度学习等)提升系统性能。同时,提供了丰富的代码资源与仿真模型,涵盖永磁同步电机控制、逆变器设计、多智能体任务配、虚拟电厂调度等复杂系统,助力科研人员快速开展复现实验与创新研究。; 适合人群:具备一定编程基础,熟悉Matlab/Python工具,从事电气工程、自动化、通信、人工智能、新能源、控制科学等相关领域研究的研发人员及研究生。; 使用场景及目标:① 学习实现FDTD仿真中的PML边界条件以有效抑制数值反射;② 掌握Matlab/Simulink在多物理场建模、控制系统设计与优化算法中的综合应用;③ 借助提供的代码资源完成科研复现、课程设计、竞赛项目或工程原型开发; 阅读建议:此资源以科研实战为导向,不仅提供理论方法,更强调代码实现与仿真验证。建议读者结合自身研究方向,按目录顺序查阅相关模块,下载配套代码进行调试与二次开发,以达到学以致用、融会贯通的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值