我和你一样,开始使用 Jasper Reports 的 Spring 辅助类,但很快就放弃了它们,因为它们过于粗粒度和不灵活,这对 Spring 来说是不寻常的。就好像他们是事后才添加的。
我遇到的一个大问题是,一旦它们被编译,就需要应用服务器反弹才能放入新版本。就我而言,我正在寻求一种解决方案,我可以在磁盘上更改它们并重新编译,就像 JSP 的正常工作方式一样(如果您不关闭此功能,许多生产站点都会这样做)。
另外,我希望能够将 jrxml 文件存储在数据库中或远程运行报告(例如,通过 JasperServer Web 服务接口)。 Spring 类使实现这些功能几乎不可能。
所以我给你的建议是:自己动手。不过,在此过程中存在一些问题,我将与您分享以最大程度地减少痛苦。其中一些内容在文档中并不明显。
您首先需要一个 jasper 报告编译器。这负责将 jrxml 文件编译成 JasperDesign 对象。有几种实现方式,但您想要的是 JRJdtCompiler。您可以在 Spring 应用程序上下文中实例化和注入它。避免使用 beanshell 编译器之类的其他编译器,因为将报告作为大型 beanshell 脚本运行并不是特别快或效率高(我在了解之前就发现了这一点很困难)。
您需要包含 JRJdtCompiler 的 jar 文件。我认为完整的 Jasper Reports dist 包括这个 jar。它是一个日食产品。
您可以将 JasperDesign 存储在您喜欢的任何位置(HttpSession、servlet 上下文或其他)。 fillReport() 方法是您感兴趣的主要方法。它创建一个 JasperPrint 对象,它是运行报告的一个实例。参数只是作为 Map 传入。
现在要创建 HTML、PDF 等格式的 versino,您需要将其导出。您可以使用 JRHtmlExporter 和 JRPdfExporter 之类的类来执行此操作。它们需要某些参数。棘手的是 HTML 导出器,因为 HTML 显然不包含图像。 Jasper 包含一个 ImageServlet 类,该类从会话(JRHtmlExporter 放置它们的位置)中获取这些,但您必须正确配置 HTML 导出器和图像 servlet,而且很难判断哪里出错了。
我不记得它的细节,但在Jasper Reports Definitive Guide 中有一个所有这些的例子,我强烈建议你在任何时候都花在这个产品上。它相当便宜,50美元。您也可以获得年度订阅,但在我看到它的 18 个多月里,我没有看到任何变化。如果您需要,只需在新版本发布时购买(您可能不会)。
希望这会有所帮助。