Ireport-jfreechart多报表同时打印

Share

      关于嵌套循环结果的打印,其实Ireport-jfreechart也有非常好的解决方案,关键在于JasperReport提供了JASPER_PRINT_LIST,可以解决类似下面的问题:

1、循环的嵌套打印
类似:一个图书管理系统,要打印出借出的所有人的借出的图书信息,由于每个人有借出的多本图书,有很多人,而且每个人需要打印一份单独的借出一览清单。
2、多报表的整合打印
类似:需要将多个JasperPrint对象的文档打印到一起,而且对报表的格式要求不同等等。

关键步骤如下:

建立一个JasperPrint泛型的list,用来存放JasperPrint对象(注意,jdk1.5之后才支持泛型,之前的版本可以不用加
private List reportlist = new java.util.ArrayList();

建立JRExporter导出对象
private JRExporter exporter = new JRPdfExporter();    

建立导出的文件流(供下载和文件输出的调用),如果是action,可以直接使用reponse.getOutputStream()对象
OutputStream outP = new ByteArrayOutputStream();

将每一个需要打印的报表JasperPrint添加到reportlist
for(;;)
    reportlist.add(***);

装载打印list
exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, reportlist);

传入要输出的文件流
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outP);

执行导出
exporter.exportReport();

ok,接下来就可以自由的运用outP流了,无论是写文件还是下载。