gpt4 book ai didi

java - 延迟编译 JasperReports .jrxml 为 .jasper

转载 作者:行者123 更新时间:2023-12-02 01:05:52 24 4
gpt4 key购买 nike

我使用 Jasper 报告 JasperReportsMultiFormatView Spring框架提供的类。创建 Spring 应用程序上下文时,此类负责将源 .jrxml 文件编译为其已编译的 .jasper 格式。

但是,这个编译过程确实减慢了应用程序的启动时间。是否可以延迟编译报告而不是在启动时编译,即报告仅在第一次请求时编译?

如果这是不可能的,欢迎提出有关如何减少/消除报告编译时间的替代建议。当然,我可以强制要求必须将编译后的报告与 .jrxml 文件一起 checkin SVN,但这只是时间问题,迟早会有人(很可能是我)忘记。

干杯,唐

最佳答案

我和你一样,开始使用 Jasper Reports 的 Spring 帮助器类,但很快就放弃了它们,因为它们太粗粒度且不灵活,这对于 Spring 来说是不寻常的。就好像它们是事后才添加的。

我遇到的一个大问题是,一旦编译完成,就需要应用程序服务器反弹才能放入新版本。就我而言,我正在寻找一种解决方案,可以在磁盘上更改它们并重新编译它们,就像 JSP 通常的工作方式一样(如果您不关闭此功能,许多生产站点都会这样做)。

或者,我希望能够将 jrxml 文件存储在数据库中或远程运行报告(例如通过 JasperServer Web 服务界面)。 Spring 类使得实现这些功能几乎不可能。

所以我给你的建议是:自己动手。不过,在此过程中存在一些问题,我将与您分享,以最大程度地减少痛苦。其中一些内容在文档中并不明显。

您需要的第一件事是 jasper reports 编译器。它负责将 jrxml 文件编译成 JasperDesign 对象。有多种实现方式,但您需要的是 JRJdtCompiler。您可以在 Spring 应用程序上下文中实例化并注入(inject)它。避免像 beanshell 编译器这样的其他编译器,因为将报告作为大型 beanshell 脚本运行并不是特别快或高效(在我知道更好之前我很难发现这一点)。

您需要包含 JRJdtCompiler 的 jar 文件。我认为完整的 Jasper Reports dist 包括这个 jar。它是一个 Eclipse 产品。

您可以将 JasperDesign 存储在您喜欢的任何位置(HttpSession、Servlet 上下文或其他任何位置)。 fillReport() 方法是您感兴趣的主要方法。它创建一个 JasperPrint 对象,它是运行报告的一个实例。参数只是作为 Map 传入。

现在要创建 HTML、PDF 等格式的 versino,您需要将其导出。您可以使用 JRHtmlExporter 和 JRPdfExporter 等类来执行此操作。它们需要某些参数。棘手的是 HTML 导出器,因为 HTML 显然不包含图像。 Jasper 包含一个 ImageServlet 类,它从 session 中获取这些内容(JRHtmlExporter 将它们放置在其中),但是您必须正确配置 HTML 导出器和图像 servlet,并且很难判断哪里出错了。

我不记得它的具体细节,但 Jasper Reports Definitive Guide 中有一个关于这一切的示例。 ,如果您随时花在该产品上,我强烈建议您购买。 50 美元相当便宜。您也可以获得年度订阅,但在我看到的 18 个多月里,我没有看到任何变化。如果您需要(您可能不会),只需在新版本发布时购买即可。

希望这有帮助。

关于java - 延迟编译 JasperReports .jrxml 为 .jasper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/314313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com