【问题标题】:ArrayOutOfBoundException when exporting jasperreport using JRTextExporter使用 JRTextExporter 导出 jasperreport 时出现 ArrayOutOfBoundException
【发布时间】:2016-02-17 08:18:28
【问题描述】:

我正在使用 jasper 报告库向我的 java web 应用程序添加一些 jasper 报告,报告本身很好,但是当我尝试使用以下代码从我的应用程序中导出它时出现问题

    JasperPrint jasperPrint;
try {
    //get the database connection
    Connection connection = dataSource.getConnection();
    FileInputStream fin = new FileInputStream(report_path);
    ObjectInputStream ois = new ObjectInputStream(fin);
    jasperReport = (JasperReport) ois.readObject();
    ois.close();
    //get report result
    jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
    connection.close();
    if (jasperPrint.getPages().size() > 0) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        JRExporter exporter;
        exporter = new JRTextExporter();
        exporter.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT,19f);
        exporter.setParameter(JRTextExporterParameter.CHARACTER_WIDTH,7f);
        exporter.setParameter(JRTextExporterParameter.BETWEEN_PAGES_TEXT,"");
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
        exporter.exportReport();
    }
}
catch (Exception e) {
    e.printStackTrace();
}

当我尝试导出报告时出现以下错误

java.lang.ArrayIndexOutOfBoundsException: 12
at net.sf.jasperreports.engine.export.JRTextExporter.exportText(JRTextExporter.java:614)
at net.sf.jasperreports.engine.export.JRTextExporter.exportElements(JRTextExporter.java:392)
at net.sf.jasperreports.engine.export.JRTextExporter.exportPage(JRTextExporter.java:369)
at net.sf.jasperreports.engine.export.JRTextExporter.exportReportToWriter(JRTextExporter.java:345)
at net.sf.jasperreports.engine.export.JRTextExporter.exportReport(JRTextExporter.java:194)

导致错误的行是这一行 exporter.exportReport();

这件事的奇怪之处在于,当我选择任何其他格式时,代码运行正常并且我得到报告,如果数据少于 5 行,报告导出成功,text 格式也是如此。我对此进行了搜索,发现它是 jasperreports 库中的一个错误,应该在版本 2.2.1 中修复我想,我正在使用 jasperreports 库版本 5.5.1 我也使用了版本 2.2.16.x 但问题是还在那里。
似乎它与页面宽度和高度有关,但我不知道如何解决它。这是我报告的第一行

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1" language="groovy" printOrder="Horizontal" pageWidth="1875" pageHeight="40" orientation="Landscape" columnWidth="1875" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" isIgnorePagination="true" uuid="b8c06aba-6b16-4020-8a9e-574d630cdbae">

我还观察到,当我设置 isIgnorePagination="false" 时,问题出现了,但我在报告末尾有空行,这是我不想要的。
请帮忙,让我知道错误的原因和修复它(如果有)。

【问题讨论】:

  • 在你的 if() 中尝试... jasperPrint.getPages().size()-1
  • 这可能是 jasper 报告中的一个错误,请注意,在使用 JRTextExporter 时,它通常假定您也使用忽略的分页(因为您只是生成报告的文本输出)。我们无法重现错误,因为我们需要相同的数据源等。要么您设法生成 minimal reproducible example 并编辑您的问题,但最好将其作为 bug-tracker 直接提交给 jasper 报告

标签: java jasper-reports


【解决方案1】:

我如何用 Japser Text Exporter 解决同类问题,问题如下所示,

我正在使用子报告,其中的标签如下所示,xy 为负值,因为在设计模式下对齐它时,它必须放在获得与 main 正确对齐的报告的边界,

&lt;reportElement stretchType="RelativeToBandHeight" x="-6" y="-1" width="54" height="13"

然后在子报表中有一个recordCounter,当它超过99和100是三个字符时,那时我从exportText方法JRTextExporter类中得到这个异常,然后我增加了宽度 recordCounter 以适应 5 个字符,现在它可以正常导出了。

你的情况可能不一样,只是想分享我的问题。

我正在使用 jasperreports-6.2.0

【讨论】:

    【解决方案2】:

    在我的例子中,JasperReport 4.5.1 版本中出现了这个问题。

    我使用子报表来生成 TXT 文件。

    要解决此问题,必须在所有子报表中使用相同的带宽和 textField 的宽度。在我的示例中,band 的宽度为 15,textField 的宽度为 14。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多