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

因实习工作需要,最近两天一直在研究iReport,入门的文章比较多,不再赘述。这是一个比较好的入门教程。http://hi.baidu.com/xhz12345/blog/item/c85f36239b4f5f41ac34de45.html

经常做报表的人知道,报表或者合同的开头通常包含封面或者一系列固定的说明和介绍信息,比如目录大纲,公司简介等,报表结尾通常又有一些固定不变的 内容,比如条款,签名等,而用过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,没有文档几乎没有办法猜到,邪恶……

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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值