0

我正在使用 grails 版本 2.4.0 和JasperReports插件:1.9.0(也尝试过版本 jasper-1.10.0-SNAPSHOT)但是当我导出到 pdf 时出现错误。

当我第一次启动项目时,我运行导出报告并收到此消息

org.apache.commons.collections.map.ReferenceMap

之后,当我再次尝试时,它会显示此错误。

Could not initialize class net.sf.jasperreports.engine.xml.JRXmlDigesterFactory

它似乎与 2.4.0 版本具有竞争力,因为它适用于 2.2.4

这是我的代码

在控制器中

def results = new ArrayList()
        def reportFolder = "${grailsApplication.parentContext.getResource('reports').file.absolutePath}"
        def sep = System.getProperty('file.separator')
        def app = Applicant.get(2)
        results.add(
                first: app.firstName,
                middle: app?.middleInitial,
                last: app.lastName,
                ssn: app.ssn,
                workPhone: app.workPhone,
                homePhone: app.homePhone
        )
reportService.exportPDFReport("${reportFolder}${sep}aaa.jrxml", results, params, response)

服务中(注意服务名为:reportService)

def exportPDFReport(String reportPath, results, params, response) {
        def temp_file = File.createTempFile("jasperReport", ".pdf")
        def jrDataSource = new JRMapCollectionDataSource(results)
        JasperReport jReport = JasperCompileManager.compileReport(reportPath)
        JasperPrint print = JasperFillManager.fillReport(jReport, params, jrDataSource)
        JasperExportManager.exportReportToPdfFile(print, temp_file.absolutePath)
        response.setContentType("application/force-download")
        response.setHeader("Content-Transfer-Encoding", "binary")
        response.setHeader("Content-disposition", "attachment; filename=${jReport.name}.pdf")
        response.outputStream << temp_file.newInputStream()
        temp_file.deleteOnExit()
    }

有任何想法吗?

4

2 回答 2

1

在 2.4 或更高版本中。您不能组合 jasper 插件,因为它缺少第三方库。

解决这个问题非常容易。您只需要将这些罐子复制到您的 /lid

  • org.apache.commons.collections.jar
  • commons-beanutils-1.9.2.jar

当然 100% 它工作:-)

于 2014-08-05T01:32:22.620 回答
0

在版本 2.4 中删除了 Holder 静态类。对于仍然使用这些类的插件,它们会导致错误。我也会尝试使用 2.4.2 版本来代替笑容。您能否也编辑并给我们一个完整的堆栈跟踪以帮助调试。

于 2014-08-02T18:44:44.860 回答