JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式。该库完全由Java写成,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。

首先引入数据源:

0a3620aed35b6f6d05c8e7cb9a67aee4.png

块项目中可根据自身需要选择数据源,可以是javaBean的方式,也可以是jdbc数据库。本人在项目中使用的数据源是JDBC connection:

38a1ef89d03102ffbc8b1d34bc58219c.png

数据源的选择是为了制作模板文件而使用

下图创建一个Blank A4的模板:

3a4caef9ccefc7f37a05c6623f67f810.png

模板结构介绍:

259e3313e07b955f1bfde6ebe6314fa9.png

Title:报表的表头。只在首页打印一次。

PageHeader : 报表的页首。 每页都打印。

ColumnHeader : 报表的行首,通常用来定义字段名称, 每页都打印。

Detail : 报表的内容 ,根据数量自动循环输出,可以添加多个。

ColumnFooter : 报表的行尾,可用来告知报表的一些参数,诸如页码等。每页都打印。

PageFooter:报表的页尾,每页都会打印。

Summary:汇总计算用。

下图edit page format可编辑报表A4格式:

0ac7879bbb2f03e23be2d5dcd0daa3cd.png

de7a191b33a33e85abe513d25d9de5d6.png

模板制作遇到的问题

在制作类似excel样式的表格时,jasperreport只能使用控件入text Field去拼凑出类似的效果,本人起初是把所有控件拼凑到一个detail下面,这样会导致一行的文本,在一个字段数据比较多的情况下产生溢出,且导致整个布局错乱。后来经过多方尝试把每一行数据都放到一个detail中,这样整体的格式就会像excel那样动态随内容扩充,而不影响整个页面的布局了:

b6a9ae80f5b6cf4b639489035cbdd305.png

其中每行text field控件进行如下布局设置:

position type:fix relative to top,stretch type:relative to band height,Print When中勾选Detail Overflows, 在text field中勾选stretch with overflow。这样表格就不会因为填充数据造成错乱了。

cc1fdf162958d54142cf1bf3b2c2bd38.png

springboot中集成jasperReport方案

1、pom.xml文件中直接引用下面的包:

e5a6cfa57a5ecd4aff49976db9ff5ea2.png

jasperrepoert-fonts是本人对源码进行修改后重启打包生成的,因为jasperrepoert对于中文的支持不到位,需要修改相关配置,以宋体为例,找到宋体ttf文件导入到jasperreports-fonts-6.5.1netsfjasperreportsfontsdejavu目录下,然后修改jasperreports-fonts-6.5.1netsfjasperreportsfonts目录下的fonts.xml文件,增加下图的配置即可使jasperreport导出pdf时支持中文宋体这种格式,如果读者想增加更多字体可以依据上述方案继续添加。

cf3b0e5332ac2dade8a786b163d114c2.png

2、导出成多种格式的文件:

87134f038856b605a6577f8a47d7c616.png

在web项目中,可以使用流的方式直接返回给前端流文件进行前端预览:

7dbfaa838ea3f3966f04fa713d41dc06.png

3、批量查看pdf功能:

通过查询源码跟踪后发现导出pdf的源码文件是:

public void exportToPdfStream(
JasperPrint jasperPrint,
OutputStream outputStream
) throws JRException
{
JRPdfExporter exporter = new JRPdfExporter(jasperReportsContext);
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputStream));
exporter.exportReport();
}

1f01deae868d6151f2e9e7949321b8de.png

可以把List对象传进去,说明了可以把每个报表的模板jasperPrint对象放在参数中,下面是实现方案:

71a933187a427d27f8caddcaffc50243.png

8cb360a8e6fcec568b2f1acd3d6e0c4d.png

这样就可以把多个报表文件同时导出或者预览了。

大家需要JasperReport方面资料或者更多java架构资料的可以私信我“资料”

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐