使用JRTextExporter

时间:2016-02-17 08:18:29

标签: java jasper-reports

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

    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"问题时,问题仍然存在,但报告末尾有空行,我不想要。 请帮忙,让我知道错误的原因以及错误的解决方法。

2 个答案:

答案 0 :(得分:1)

我的Japser Text Exporter解决了同样的问题,问题如下,

我正在使用Sub报告,其中的标记如下所示, x y 负值,因为在设计模式下对齐时,必须将其放在与main,

获得正确对齐报告的边界

<reportElement stretchType="RelativeToBandHeight" x="-6" y="-1" width="54" height="13"

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

在你的情况下可能不一样,但只想分享我的isue n fix。

我正在使用jasperreports-6.2.0

答案 1 :(得分:0)

在我的情况下,它在JasperReport的4.5.1版本中出现了这个问题。

我正在使用子报告生成TXT文件。

要修复它,必须在所有子报告中使用相同的带宽和textField的宽度。在我的例子中是乐队15的宽度和textField 14的宽度。