2

我尝试使用 ResultSet 创建 Jasper Print 以构建带有打印的 PDF 报告。问题是,Jasper Print 的创建速度非常慢。ResultSet 是一个包含大约 5000 行的表。创建打印需要超过 2 分钟。

我发现了这个解决方案:JasperReports fillReport too slow and resource sumption

但这对我不起作用。不同的是,我使用动态报告。

JasperPrint jasperPrint = DynamicJasperHelper.generateJasperPrint(dynamicReport, new ClassicLayoutManager(), resultSet);

编辑:关键部分在 JRVerticalFiller 类的 fillReport 方法中。

        if (this.next()) {
        this.fillReportStart();

        while(this.next()) {
            this.fillReportContent();
        }

        this.fillReportEnd();
    } 

fillReportContent 方法被一次又一次地调用了将近两分钟。

4

1 回答 1

-1

我从未使用过 Jasper Print,但如果您的目标是创建一个包含所有这 5000 个结果的 PDF 文件,为什么不创建一个包含<table><tr><td>元素内所有结果的 html 文件,然后使用wkhtmltopdf 之类的工具来将文件从html转换为pdf?

这样,只需几秒钟。

您还可以为 pdf 文件的每一页指定页眉和页脚(您可以包含图像或所需的文本等)

注意:wkhtmltopdf 不是 java 库,它是在大多数操作系统上运行的可执行文件,但是,您可以使用 java 的 ProcessBuilder 来执行它。

于 2020-07-07T00:26:09.833 回答