天天看點

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();

        }

    }

}