iReport学习笔记——多张报表连续输出

来源:互联网 发布:统计学中位数的算法 编辑:程序博客网 时间:2024/05/22 03:46
 

因工作需要,最近两天一直在研究iReport,入门的文章比较多,不再赘述。

经常做报表的人知道,报表或者合同的开头通常包含封面或者一系列固定的说明和介绍信息,比如目录大纲,公司简介等,报表结尾通常又有一些固定不变的内容,比如条款,签名等,而用过iReport做报表的人知道,其一次只能编辑一个报表模板,显然一个报表模板无法完整的显示整个报表所需的内容(子报表功能也许可以,不过比较复杂,且模板间耦合性太高)。那可否将多个iReport编辑的模板连接到一起合成一个新报表呢?

jasperreport生成PDF报表主要有runManager方法和exporter方法,它们都是返回字节流输出到客户端,以PDF格式解析生成报表。那么将多个模板生成的字节流连接在一起再输出是否就能连接多个报表了呢?

尝试后发现不行,最后输出的永远只是最后一个报表。后来辗转在网上寻找了很久都没有合适的解答,无奈啊,jasperreport是开源软件,但文档是收费的,网上基本没有,而其demo又只有一些基本的输出一份报表的实例。后来无意中看到一段代码,整理后如下:

ServletContext servletContext =this.getServletContext();
   JasperPrint jasperPrint = JasperFillManager.fillReport(servletContext.getRealPath("/Jasper/test_report_3.jasper"), parameters, dataSource);
   JasperPrint jasperPrint2 = JasperFillManager.fillReport(servletContext.getRealPath("/Jasper/test_report_2.jasper"), parameters, conn);
   List jasperPrintList = new ArrayList();
   jasperPrintList.add(jasperPrint);
   jasperPrintList.add(jasperPrint2);

   //获取输出字节流
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   JRPdfExporter exporter = new JRPdfExporter();
   exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST,jasperPrintList);
   exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
   exporter.exportReport();
   byte[] bytes= baos.toByteArray();

此时在输出,搞定,多个报表模板可以连接到一起了。

原来jasperreport的exporter方法提供了传入jasperPrintList方法,可是找不到文档很多人都不知道,而且它接受参数的方式是setParameter,没有文档几乎没有办法猜到,邪恶……

现在再复杂的报表都可以通过分段编辑模板然后连接到一起输出了。

原创粉丝点击