将JasperPrint直接传输到PDF

时间:2017-10-23 07:53:18

标签: java jasper-reports

是否可以直接将结果流式传输到pdf文件而不是先创建JasperPrint对象?我的JasperPrint对象可能变得非常大并且发生了java.lang.OutOfMemoryError ...

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, reportparameter.getAll(), dataSource);
// dead end
OutputStream output = new FileOutputStream(new File("C:/Users/bla/Desktop/test/JasperReport.pdf"));
JasperExportManager.exportReportToPdfStream(jasperPrint, output);

1 个答案:

答案 0 :(得分:0)

我有点找到了解决方案......首先,您将JasperPrint对象写入磁盘,然后您可以流式传输内容并通过流创建PDF。 没有内存问题,但您需要先将结果保存在磁盘上。

    OutputStream printOut = new FileOutputStream(new File("C:/Users/bla/Desktop/test/jasperprint.jasperprint"));
    JasperFillManager.fillReportToStream(jasperReport, printOut, reportparameter.getAll(), dataSource);
    printOut.close();

    OutputStream output = new FileOutputStream(new File("C:/Users/bla/test/JasperReport.pdf"));
    JasperExportManager.exportReportToPdfStream(new FileInputStream(new File("C:/Users/bla/Desktop/test/jasperprint.jasperprint")), output);
    output.close();