模版生成Word报表

目录

一、报表技术对比

二、POI-TL使用


一、报表技术对比

1、JasperReports报表技术

优点:

①开源免费。JasperReports是一款开源工具,用户可以免费获取和使用,无需支付任何授权费用。

②功能丰富。JasperReports提供了丰富的组件和功能,包括图表、交叉表、文本框、图片、超链接、子报表等,可以满足用户各种类型的报表需求。

③多种输出格式和数据源支持。JasperReports支持多种输出格式和数据源,包括PDF、HTML、Excel、Word等输出格式,以及MySQL、Oracle、SQL Server等数据库,可以满足用户不同数据和输出格式的需求。

缺点:

①定制性较差。JasperReports虽然提供了丰富的报表组件和功能,但是定制性较差,用户想要实现一些特定的功能需要编写复杂的代码。

②报表设计器界面不够直观。JasperReports的报表设计器界面相对较为陈旧,不够直观和易于使用。

③生成的报表文件较大。JasperReports生成的报表文件较大,可能会影响报表的加载速度和性能。

2、POI-TL报表技术

优点:

①支持动态填充文本、图片、表格、列表、文档。

支持DOCX格式,所有的模板标签都是以 {{ 开头,以 }} 结尾,模板标签可以出现在任何非文本框的位置,包括页眉,页脚,表格内部等等。

③poi-tl的一个核心特点是数据模型与样式的分离,同样的数据模型可以用来渲染各种不同样式的模板。

④文档的样式继承模板标签的样式,即如果模板{{title}}是蓝色微软雅黑加粗四号字体,则替换后的文本也是蓝色微软雅黑加粗四号字体。

二、POI-TL使用

1、依赖引入

目前最新版为1.12.2

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

2、运行Demo

Word模版文件配置:

Word模版Demo程序代码:

java 复制代码
public static void main(String[] args) throws IOException {
    // 构造数据
    Map<String,Object> dataMap = new HashMap<>();
    dataMap.put("title", "替换的模版标题");
    // 编译模版,渲染数据
    XWPFTemplate template = XWPFTemplate.compile("template.docx").render(dataMap);
    // 输出文件
    template.writeAndClose(Files.newOutputStream(Paths.get("output.docx")));
}

Word模版生成效果:

3、文本

html 复制代码
以大括号标识:{{var}}

数据模型:

①String :文本

②TextRenderData :有样式的文本

③HyperlinkTextRenderData :超链接和锚点文本

④Object :调用 toString() 方法转化为文本

java 复制代码
put("name", "Sayi");
put("author", Texts.of("Sayi").color("000000").create());
put("link", Texts.of("website").link("http://deepoove.com").create());
put("anchor", Texts.of("anchortxt").anchor("appendix1").create());

4、图片

html 复制代码
以@开始:{{@var}}

数据模型:

①String :图片url或者本地路径,默认使用图片自身尺寸

②ByteArrayPictureRenderData

③FilePictureRenderData

④UrlPictureRenderData

java 复制代码
// 指定图片路径
put("image", "logo.png");

// svg图片
put("svg", "https://img.shields.io/badge/jdk-1.6%2B-orange.svg");

// 图片文件
put("image1", Pictures.ofLocal("logo.png").size(120, 120).create());

// 图片流
put("streamImg", Pictures.ofStream(new FileInputStream("logo.jpeg"), PictureType.JPEG).size(100, 120).create());

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

// java图片,我们可以利用Java生成图表插入到word文档中
put("buffered", Pictures.ofBufferedImage(bufferImage, PictureType.PNG).size(100, 100).create());

5、表格

相关推荐
Yuanymoon32 分钟前
【由技及道】统一封装API返回结果后String返回报错文件解决原理--Spring 消息转换器的层次图解与规则说明【人工智障AI2077的开发问题日志002】
java·spring
听风说雨的人儿39 分钟前
ES6 class的继承概念
java·前端·es6
l_tian_tian_42 分钟前
JavaWeb——Mybatis、JDBC、数据库连接池、lombok
java·数据库·mybatis
臣妾写不来啊1 小时前
使用dify的api连接外部知识库,dify连接ragflow的知识库(附java代码)
java·开发语言·spring boot
深思慎考1 小时前
Linux——进程间通信初解(匿名管道与命名管道)
java·linux·服务器
Seven971 小时前
【设计模式】使用解释器模式简化复杂的语法规则
java·后端·设计模式
yyueshen1 小时前
JVM中是如何定位一个对象的
java·jvm
异常驯兽师2 小时前
《Java三剑客:JDK、JRE、JVM的“塑料友情”》
java·开发语言·jvm
Seven972 小时前
【设计模式】通过访问者模式实现分离算法与对象结构
java·后端·设计模式
不会写代码的码农农2 小时前
【2025年26期免费获取股票数据API接口】实例演示五种主流语言获取股票行情api接口之沪深A股涨停股池数据获取实例演示及接口API说明文档
java·开发语言·python·股票api·股票数据接口·股票数据