【问题标题】:Jasper Print creation is very slowJasper Print 创建速度很慢
【发布时间】:2020-06-22 10:45:38
【问题描述】:

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

我找到了这个解决方案:JasperReports fillReport too slow and resource consuming

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

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

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

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

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

        this.fillReportEnd();
    } 

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

【问题讨论】:

  • 您使用过 Java 分析器吗?你试过调试吗?
  • JRVerticalFiller 类中的 fillReport 方法需要很长时间。首先我想,它是一个无限循环。但是创建 ReportContent 需要花费很多时间。

标签: java performance jasper-reports dynamic-jasper


【解决方案1】:

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

这样,只需几秒钟。

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

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

【讨论】:

  • 请问为什么投反对票?如果您的目标是从您的结果集中创建一个包含 5000 行的 PDF,这是一种解决方法,并且它需要不到 2 秒(而不是 2 分钟),从我的角度来看,这是一个更好的解决方案。
猜你喜欢
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 2021-09-01
  • 1970-01-01
相关资源
最近更新 更多