天天看点

JasperReport + iReport 实现Java报表套打

                     JasperReport + iReport  实现报表套打

最近有个朋友问我在 Java 的 JasperReport 中怎么实现报表的套打,其实之前我也没有想过这个问题,他这么一问让我想到了一个解决方案。这个解决方案应该是可以的。呵呵。。

我这里没有给出打印的代码。因为这样的代码网上到处都有的,所有我就没有放上来了。

package  com.vincent.report.demo;

import  net.sf.jasperreports.engine. * ;

import  javax.servlet.ServletException;

import  javax.servlet.ServletOutputStream;

import  javax.servlet.http.HttpServlet;

import  javax.servlet.http.HttpServletRequest;

import  javax.servlet.http.HttpServletResponse;

import  java.io.File;

import  java.io.IOException;

import  java.util.Map;

import  java.util.TreeMap;

public   class  Demo  extends  HttpServlet {

    @SuppressWarnings( " deprecation " )

     public   void  service(HttpServletRequest request, HttpServletResponse response)

             throws  ServletException, IOException {

        String doType  =  request.getParameter( " doType " );

         try  {

             // Jasper 文件

            File reportFile  =   new  File(request.getRealPath( " /jasperreport/liuxiaohua_report.jasper " ));

            Map paramter  =   new  TreeMap();

             // 背景图片做为参数传递,不用写绝对路径

            paramter.put( " image " , request.getRealPath( " /jasperreport/report.gif " ));

             // 根据 doType 的不同,传递不同的参数(是否传递背景图片)

             // 这里需要注意的是:这报表的设计的时候 image 这个参数的 Use as a Prompt 复选框不要选

             // 如果你选了那你一定要传递这个参数过去

             // 这样你就在显示报表的时候传递一个背景图,打印时不传递背景图,打印出来的报表就没有背景了

             // 这样就可以实现套打,具体打印代码我就不写了。

             byte [] bytes  =  JasperRunManager.runReportToPdf(

                      reportFile.getPath(), doType.equalsIgnoreCase( " print " )  ?   null  : paramter,  new  JREmptyDataSource());

             // 生成PDF文件

            response.setContentType( " application/pdf " );

            ServletOutputStream ouputStream  =  response.getOutputStream();

            ouputStream.write(bytes,  0 , bytes.length);

            ouputStream.flush();

            ouputStream.close();

        }  catch  (Exception e) {

            System.out.println( " error " );

            e.printStackTrace();

        }

    }

}