Jasper Ireport 一起导出两个模板

这事第二次写这个文章了,上次写到一半公司停电,好吧!没有保存,俗话说的好,点背不能怨社会,淡定。

在我们通常用ireport制作模板打印PDF文件时,最常用的是一次使用一个模板。但是接到客户的要求说是要先出说明,再打印数据。这就是两个模板,要找方法了。

我一直用的是struts2配置jasper,这样可以少写很多jasper固定的代码,只需要在struts.xml中配置就可以了,代码如下:

<action name="repairRep3" class="com.cider.action.MaintenanceInvoice">
            <result name="success" type="jasper">
                <param name="location">/report/MaintenanceInvoice.jasper</param><!--模板名称-->
                <param name="dataSource">list</param><!--要打印的list-->
                <param name="reportParameters">map</param><!--要打印的map-->
                <param name="format">PDF</param><!--导出文件名称-->
            </result>

</action>

以上是导出一个模板的情况,但是导出两个模板怎么在struts.xml中配置,我在网上找了很久也没找到方法,如果哪位知道怎么做,望不吝赐教!

我要说的是在写代码实现的导出两个模板的方法。

首先将要打印的数据封装在list和map里,这里就不详细说了。

1.用JasperView导出

            JRBeanCollectionDataSource jrbean = new JRBeanCollectionDataSource(listT);
            JasperPrint jasperPrint1 = JasperFillManager.fillReport(servletContext.getRealPath("/report/tplate-report.jasper"),map);
            JasperPrint jasperPrint2 = JasperFillManager.fillReport(servletContext.getRealPath("/report/tplate-report2.jasper"),map,jrbean);
            
            List pages = jasperPrint2 .getPages();
            for (int j = 0; j < pages.size(); j++) {
                JRPrintPage object = (JRPrintPage)pages.get(j);
                jasperPrint1.addPage(object);
           }
          JasperViewer.viewReport(jasperPrint1,false);

打印出来的文档时用Jasper自带的插件打开的,会让客户很不习惯(为什么不是我电脑上装的PDF软件?)。

2.ServletContext servletContext = ServletActionContext.getServletContext();
        HttpServletResponse response = ServletActionContext.getResponse();
        response.setContentType("application/pdf");

            JRBeanCollectionDataSource jrbean = new JRBeanCollectionDataSource(listT);
            JasperPrint jasperPrint1 = JasperFillManager.fillReport(servletContext.getRealPath("/report/tplate-report.jasper"),map);
            JasperPrint jasperPrint2 = JasperFillManager.fillReport(servletContext.getRealPath("/report/tplate-report2.jasper"),map,jrbean);
            List<JasperPrint> listJasperPrint = new ArrayList<JasperPrint>();
            listJasperPrint.add(jasperPrint1);
            listJasperPrint.add(jasperPrint2);
            
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            JRPdfExporter exporter = new JRPdfExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST,listJasperPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,baos);
            exporter.exportReport();
            response.setContentLength(baos.size());
            ServletOutputStream sos = response.getOutputStream();
            baos.writeTo(sos);
            sos.flush();
            sos.close();

就是这个,还是比较简单的。把两个模板放在一个list中,然后变成一个输出流,导出流这个就比较简单了吧!

第一次写博客让大家见笑了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值