9

我们希望生成报告,可以嵌入到 Web 应用程序中作为 html 页面,也可以以pdf 格式下载。因此我遇到了JasperReports,因为它认为它可以满足这些要求。

目前我们假设我们的报告将有大约 50-100 页,几乎只有直方图和一些表格。数据是从我们的数据库中通过一些昂贵的查询来检索的。

在评估了一整天之后,我对网络应用程序方面有几个疑问。

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

2) 如上所述,我们的报告将主要由图表组成。在将JasperPrint导出为其输出格式期间会生成图像。如果我理解一切正确,那么JR附带的ImageServlet是有能力的,但检索这些图像是

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

因为我认为我们将有很多图像 ii) 不是一种选择,如果我们想保持 webapp 的内存占用较低。但另一方面,用文件淹没文件系统也不是我能想象的最好的主意。它会在某个时候删除文件吗?

我有什么问题吗?我的理解正确吗?

4

2 回答 2

3

分页

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

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

图片

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

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

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

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

于 2009-03-12T19:49:42.157 回答
0

不,你会遇到各种各样的问题。

我认为您可以在 XHTML/CSS 中生成报告,如果您需要 PDF 渲染,只需使用Flying Saucer XHTML 渲染器。

于 2009-03-12T19:53:00.150 回答