我和你一样,从 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 个多月里,我没有看到任何变化。如果您需要,只需在新版本发布时购买(您可能不会)。
希望这可以帮助。