JasperReports是在Web应用程序中显示报告的适当解决方案吗?

Lar*_*ars 9 java pdf jasper-reports

我们希望生成报告,嵌入为Web应用程序中的html页面,或者作为pdf下载.因此我遇到了JasperReports,因为它认为它会满足这些要求.

目前我们假设我们的报告将有大约50-100页,几乎只包括直方图和一些表.我们的数据库中的一些昂贵查询会检索数据.

在对它进行评估之后,我对网络应用程序方面有几个疑问.

1)分页:当然我不想在一个网页中显示所有页面.我们需要像分页这样的东西.但JasperReports似乎不支持这种方法.与JasperReports一起提供的wepp演示概述了方法:我必须创建一个JasperPrint,它已经是完整的报告,分配了不需要的内存,并执行了昂贵的查询.然后我可以显示一个页面.但是对于每个页面一次又一次地这样做对我来说并不是一个合适的解决方案.

2)如上所述,我们的报告主要包括图表.在将JasperPrint导出为其输出格式期间生成图像.如果我理解一切正确,那么随JR一起提供的ImageServlet能够检索这些图像

i)从文件系统读取生成的图像
ii)导出器将它们存储在会话中(因此在存储器中).

因为我认为我们将有很多图像ii)不是一个选项,如果我们想要保持webapp的内存占用率低.但另一方面,文件系统充斥文件也不是我能想到的最好的主意.是什么时候删除文件?

我弄错了吗?我的理解是正确的吗?

Mar*_* K. 3

分页

这是您的服务设计如何实现寻呼的!PDF 是解决打印问题的独立输出格式。它无法从服务器读取更多数据(没有 Web 服务和阅读器扩展)。所以你可以定义,JasperReports 应该只对你的数据的一个子集进行分页。

如果您在 JasperReports 中定义数据集,则可以重用它们,而无需分配不需要的内存。

图片

如果您希望报告中包含图像并保持较低的内存占用量,请编写一个平衡算法,该算法在服务器负载低于指定值(可能是来自最后一天负载平均值的动态值)时生成图像。

您需要实时创建图像吗?如果图像是由 servlet 创建的,它们将被加载到内存中。一个Java应用程序。可以将图像传递给 ReportGenerator。

图像可以从内存、磁盘或 URL 加载;贾斯珀报告书P:170

图像永远不应该保存在 HTTP_SESSION 中!这是导致内存膨胀的完全反模式。