SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
目 錄
前言..........................................................................................................................................................2
壹.製作準備 .............................................................................................................................................2
         (一)下載所需.........................................................................................................2
         (二)環境建置.........................................................................................................3
貳.使用 Ireport 設計報表 ........................................................................................................................3
         (一)報表欄位、變數與參數設定.........................................................................4
            (1)Using Field ................................................................................................4
            (2)Using Group ..............................................................................................5
            (3)Using variable ...........................................................................................6
            (4)Using Parameter ........................................................................................7
         (二)報表內文設計.................................................................................................7
            (1)設計報表架構...........................................................................................7
            (2)加入報表物件...........................................................................................9
            (3)編譯 JRxml 檔 ........................................................................................15
參.在網頁上執行 ...................................................................................................................................16
         簡介 JasperReport API ........................................................................................16
         程式撰寫..............................................................................................................18
           HTML 輸出 .................................................................................................18
           HTML 呈現 .................................................................................................20
           HTML 預覽與列印 .....................................................................................22
         其它輸出格式......................................................................................................26
           PDF 輸出 .....................................................................................................26
           Excel 輸出 ...................................................................................................28
           Xls 輸出 .......................................................................................................28
           RTF 輸出 .....................................................................................................29
參考文件................................................................................................................................................30




                                                                             1
前言
  本文流程是以一個案例來說明報表的製作,因此,其案例需求描述為:將一
份關鍵名單依照”城市別”作分群並記算其筆數,而後以報表印出。(本案例參考
來自:jasperReport_prj1.2.7 的 demo case。)因此,預期會有:


1. 製作「分群」的報表。過程會實作如何設定報表欄位、報表變數以及報表參
   數。
2. 藉由 java 網頁程式,以實現用 Borwser 觀看常見的報表格式。
3. 簡介 JasperReport 關於報表輸出格式的 API。


    最後,不免俗地,再 review 一下 JasperReport 之目的吧:
The main purpose of JasperReports is to help create page-oriented
ready-to-print documents in a simple and flexible manner。




壹.製作準備

(一)下載所需

    1. Ireport1.2.7(內即附有 JasperReport.jar)
       http://prdownloads.sourceforge.net/ireport/iReport-1.2.7-windows-installer.e
       xe?download
    2. ItextAsian.jar (當無此,如指定 pdf 為 output 文件,將無法顯示字型)
        http://itext.sourceforge.net/downloads/iTextAsian.jar
    3. Tomcat4 or later http://tomcat.apache.org/
    4. JDK http://java.sun.com




                                        2
(二)環境建置
 1. 為使編譯後的*.jasper 與*.jrxml 放在同一目錄:
    Options > 選項 > 編譯,勾選"編譯在報表資料夾"。
 2. 設定外部程式 pdf:
    Options > 選項 > 外部程式,設定[pdf 預覽],找到 pdf 的執行程式
    AcroRd32.exe。其它如 html, rtf, cvs 等亦是可設定。
 3. 啟動一個 tomcat server。



貳.使用 Ireport 設計報表
 本範例設計結果如下:




 而其執行結果如下:(PDF format)




                         3
(一)報表欄位、變數與參數設定
下拉式選單 檔案 > 開啟新檔,在”報表名稱”填入一報表名
稱”PrintReport.jrxml”,其它照預設。
在 檔案 > 存檔,存至<webroot>out_demoreports 下。



(1)Using Field
       建立四個欄位,並在 預覽 > 報表欄位 > 新增,設定如下:
欄位名         屬性設定
City        預設
Id:         [Field class type]:Java.lang.integer
Name        預設
Street      預設




                                    4
(2)Using Group
 預覽 > 報表群組 > 新增,新增設定如下:
一
群組欄位        屬性設定
CityGroup   [Group expression] $F{City}
            [Min height to start new page] 60
            [Group header(footer) band height] 20

            Note:
            在報表結構內會產生一”CityGroupHeader”
            與”CityGroupFooter”,且[報表變數]會自動產生對應變數。




                                 5
(3)Using variable
在 預覽 > 報表變數 > 新增,設定如下:
變數名          屬性設定
CityNumber   [Variable Name] CityNumber
             [class type] Integer
             [calcuation type] System
             [Reset type] Group
             [Reset group] Citygroup
             [Increment type] None
             [Initial value expression]
             ($V{CityNumber} != null)?(new
             Integer($V{CityNumber}.intValue() + 1)):(new
             Integer(1))
              (注意不是 variable expression)




                            6
(4)Using Parameter
在 預覽 > 報表參數 > 新增,新增設定如下:
參數名                     屬性設定
BaseDir,報表之 Logo 圖 [Class type] java.lang.File
片的路徑指定。            勾選 is for prompt
ReportTitle             [Class type] java.lang.String
                        勾選 is for prompt




(二)報表內文設計

(1)設計報表架構
    要在報表內文加入各種物件前,先調整高度,以利配置物件:
    在 預覽 > 欄,設定 Band height


                                     7
分別設定如下:
Document Struct   Setup
Title             Band:height 50
PageHeader        Band:height 20
ColumnHeader      Band:height 0
CityGroupHeader   Band:height 20
Detailer          Band:height 20
CityGroupFooter   Band:height 20
ColumnFooter      Band:height 0
PageFooter        Band:height 40
Summary           Band:height 0




                          8
(2)加入報表物件
(A)Title 欄




             先取一 Frame 容器   ,並於其上放入下表所述物件:

    報表物件           頁籤        屬性設定



                               9
Image        【Image】        1.在[Image expresson]加入
                               new File($P{BaseDir}, "via.gif")
                               2.[Class]選 java.io.File
                【Hyper-link】 1.[hyperlink target]:self
                             2.[hyperlink type]:reference
                             3.[hyperlink reference]加入
                               “www.viatech.com”
   Text Field   【Text Field】 [evaluation time]:Now
                             [Textfield expression]:$P{ReportTitle}

                【Font】         [Font name]新細明體(中文字型即可)
                               [PDF font name] Msung-Light
                               [PDF Encoding]
                               UniCNS-UCS2-H (Chinese traditional)

                               勾取 PDF Embedded



(B)PageHeader




   設定如下:
   報表物件            頁籤設定            屬性設定
                   【common】        [backgroup] ,[Foregroup]          black
   Rectangle
                                   [top]:5
                                   [left]:0
                                   [height]:15


                                    10
Static text      【common】     [backgroup] black
                                [Foregroup] white
  分別設置三個:          【Font】       [Font name]新細明體(中文字型即可)
  ID,Name,Street                [PDF font name] Msung-Light
                                [PDF Encoding]
                                UniCNS-UCS2-H (Chinese traditional)

                                勾取 PDF Embedded
                   【static Text】 分別填入”ID”,”姓名”,”住所街道”



(C)CityGroupHeader




   設定如下:
  報表物件          頁籤          屬性設定
                【common】 1.[bg],[fg]: 銀色
  Rectangle

  TextField     【common】 勾選[transparent]
                         (下方圖層看顯現出來)
                【Font】      [Font name]新細明體(中文字型即可)
                            [PDF font name] Msung-Light
                            [PDF Encoding]
                            UniCNS-UCS2-H (Chinese traditional)
                            勾取 PDF Embedded




                                 11
【TextField】 [TextField Expression]:
                          " "+
                          String.valueOf($V{CityNumber}) + ". "
                          + String.valueOf($F{City})
                 【Common】 依序設定 top, left, height 分別為 19, 0, 1
   Line




(D)Detailer




   報表物件        頁籤                屬性設定
   TextField   【TextField】       在[Textfield expression],分別對三個

                                    物件加入:

   分別加入                          $F{Id}
   三個:                           $F{Name}
   id,name,str                   $F{Street}
   eet         【Font】            [Font name]新細明體(中文字型即可)
                                 [PDF font name] Msung-Light
                                 [PDF Encoding]
                                 UniCNS-UCS2-H (Chinese
                                 traditional)
                                 勾取 PDF Embedded
               【Common】          依序設定 top,left,height:19, 0, 1
   Line



                                   12
(E)CityGroupFooter




   報表物件          頁籤          屬性設定
                 【common】 依序設定 top,left,height:19, 0, 1
   Line

   Static text                Count
                 【Static Text】加入文字 ”計數:”
                 【Font】      [Font name]新細明體(中文字型即可)
                             [PDF font name] Msung-Light
                             [PDF Encoding]
                             UniCNS-UCS2-H (Chinese traditional)
                             勾取 PDF Embedded

   Text field    【Text Field】[Textfield expression] 加入
                             $V{CityGroup_COUNT}
                 【Font】      [Font name]新細明體(中文字型即可)
                             [PDF font name] Msung-Light
                             [PDF Encoding]
                             UniCNS-UCS2-H (Chinese traditional)
                             勾取 PDF Embedded



(F)PageFooter




                                    13
報表物件        頁籤           屬性設定
            【Common】 分別設定 Top,Left,Height:10, 0, 1
 Line

TextField   【Text Field】1. [Evaluation Time] now
                        2. [Textfield expression]
                         "Page " +
                         String.valueOf($V{PAGE_NUMBER}) + "
                         of"
TextField   【TextField】 1.[Evaluation time] Report
                         2.[TextField expression]
                         " " + String.valueOf($V{PAGE_NUMBER})

TextField   【TextField】 1. [Evaluation time] Now
                        2. [Textfield expression] “關鍵名單”

            註:上述三者 [Font name]新細明體(中文字型即可)
                      [PDF font name] Msung-Light
               的【Font】
                      [PDF Encoding]
                      UniCNS-UCS2-H (Chinese traditional)
                      勾取 PDF Embedded


設計完後,大致對照如下圖:




                                 14
(3)編譯 JRxml 檔
  將設計好的 JRxml 檔作編譯,建立 > 編譯,編譯後的檔案(jasper),會
放置於同目錄內。此外,亦可於 ireport 直接執行報表(先決定要預覽的 format)




                      15
參.在網頁上執行

簡介 JasperReport API
  該架構圖主要呈現與報表輸出有關的 API,其由上而下的順序,使得以瞭解
報表中介過程中所會使用的程式介面為何,如此,將有助程式員之程式的開發。
  下方會展示不同格式文件的輸出,將會用到架構圖上的所列 API。
                    各項類別的內容可參閱官方 JasperRepor API
                http://jasperreports.sourceforge.net/api/index.html。


 jasperReport 類別               功能說明
 JasperCompilerManager         負責將*.jrxml 編譯成*.jasper or JasperReport 物
                               件。
 JasperFillManger              負責將*.jasper 轉製成*.jrprint or JasperPrint 物
                               件。
 JasperRunManager              負責將*.jasper 轉製成所需輸出格式的文件。
 Jr***Export                   負責將*.jrprint or JasperPrint 物件轉製成所需輸
 包括有:                          出格式的文件。
 JexcelApiExporter
 JRCvsExporter
 JRHtmlExporter
 JRPdfExporter
 JRRtfExporter 等
 JasperExportManager           負責將*.jrprint or JasperPrint 物件轉製成所需輸
                               出格式的文件。
 JasperPrintManager            負責將*.jrprint or JasperPrint 物件列印出。




                                       16
JasperReport 輸出相關 API 架構圖

                    *.Jrxml 檔

          JasperCompilerManager
                Class 之方法



   JapserReport 物件          *.Jasper 檔




               JasperFillManger
                  Class 之方法


 *.Jrprint 檔                JasperPrint 物件


                                             JasperRunManager Class
       Jr***Export
                                                      之方法
        Class 之方法
                     JasperExportManager
                         Class 之方法

               不同文件格式輸出檔
               (如 Html, Rtf, Pdf 等)

JasperPrintManager
   Class 之方法



   文
   件




                                17
程式撰寫

HTML 輸出
Out_demo/HtmlOutput.jsp
<%--
HTML 文件輸出(在同一目錄下)
--%>
<%@ page contentType="text/html; charset=Big5" %>
<%@ page import="datasource.*" %>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="net.sf.jasperreports.engine.util.*" %>
<%@ page import="net.sf.jasperreports.engine.export.*" %>
<%@ page import="net.sf.jasperreports.j2ee.servlets.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>


<%
          //取得並讀取 jasper 檔,以取得 jasperReport 物件
          File reportFile = new
File(application.getRealPath("/out_demo/reports/PrintReport.jasper"));//注意*.jasper 之路徑
          if (!reportFile.exists())
          throw new JRRuntimeException("File PrintReport.jasper not found. The report design
must be compiled first.");
          JasperReport jasperReport =
(JasperReport)JRLoader.loadObject(reportFile.getPath());


         //設定報表參數
       Map parameters = new HashMap();
       parameters.put("ReportTitle", "地址表列");
       parameters.put("BaseDir", reportFile.getParentFile());


           //取得 jasperPrint 物件,但並未實際產生列表檔
       JasperPrint jasperPrint =
            JasperFillManager.fillReport(
                  jasperReport,


                                               18
parameters,
                  new WebappDataSource()
                  );


          JRHtmlExporter exporter = new JRHtmlExporter();
          exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);//指定要輸
入的列表檔
          File destFile = new File(reportFile.getParent(), jasperPrint.getName() + ".Html");
          exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,
destFile.toString());//指定輸出名稱


          //*****可在輸出的 html 檔內加入一些文字,包括:檔頭、頁間、檔尾。****
     // exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER, "hello amos");
     // exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML,
"mary is good");
     // exporter.setParameter(JRHtmlExporterParameter.HTML_FOOTER, "life is dream");
          exporter.exportReport();//執行
%>
<html>
  <body>
  已成功輸出一個 html 檔!
  </body>
</html>




                                                 19
HTML 呈現




Out_demo/HtmlShow.jsp
<%--
Html 文件呈現(在同一目錄下)
--%>
<%@ page contentType="text/html; charset=Big5" %>
<%@ page import="datasource.*" %>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="net.sf.jasperreports.engine.util.*" %>
<%@ page import="net.sf.jasperreports.engine.export.*" %>
<%@ page import="net.sf.jasperreports.j2ee.servlets.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>


<%
         //取得並讀取 jasper 檔,以取得 jasperReport 物件
         File reportFile = new
File(application.getRealPath("/out_demo/reports/PrintReport.jasper"));


                                             20
if (!reportFile.exists())
          throw new JRRuntimeException("File PrintReport.jasper not found. The report design
must be compiled first.");
          JasperReport jasperReport =
(JasperReport)JRLoader.loadObject(reportFile.getPath());


         //設定報表參數
     Map parameters = new HashMap();
     parameters.put("ReportTitle", "地址表列");
     parameters.put("BaseDir", reportFile.getParentFile());


           //取得 jasperPrint 物件,但並未實際產生列表檔
     JasperPrint jasperPrint =
            JasperFillManager.fillReport(
                  jasperReport,
                  parameters,
                  new WebappDataSource()
                  );


         JRHtmlExporter exporter = new JRHtmlExporter();
         exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);//指定要輸
入的列表檔
         File destFile = new File(reportFile.getParent(), jasperPrint.getName() + ".Html");
         exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,
destFile.toString());//指定輸出名稱


       //******非常重要的功能 分頁 指定 pageIndex 可使 scroll_bar auto_move*************
                      : ;            ,
       // exporter.setParameter(JRExporterParameter.PAGE_INDEX, new Integer(pageIndex));


     exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);//輸出文件於
response 網頁上
     //指定文件圖檔部份,無設此者,僅呈現文字
     exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,
"../servlets/image?image=");
     exporter.exportReport();//執行
%>
<html>
  <head>


                                                21
<title>
           已成功呈現一個 html 檔!
           </title>
  </head>
  <body>
  已成功輸出一個 html 檔!
  </body>
</html>




HTML 預覽與列印

預覽
Out_demo/HtmlPrint.jsp
<%--
針對 HTML 的列印需求,包括"預覽列印"、"列印單頁報表"、"列印全部報表"
--%>
<%@ page contentType="text/html; charset=big5" %>


<%@ page import="datasource.*" %>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="net.sf.jasperreports.engine.util.*" %>
<%@ page import="net.sf.jasperreports.engine.export.*" %>
<%@ page import="net.sf.jasperreports.j2ee.servlets.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>


<%
       JasperPrint jasperPrint=null;
       jasperPrint=(JasperPrint)session.getAttribute("ReportDuc");
  if (request.getParameter("reload") != null || jasperPrint == null)
       {
               File reportFile = new
File(application.getRealPath("/out_demo/reports/PrintReport.jasper"));
               if (!reportFile.exists())


                                                22
throw new JRRuntimeException("File PrintReport.jasper not found. The
report design must be compiled first.");


            JasperReport jasperReport =
(JasperReport)JRLoader.loadObject(reportFile.getPath());


            Map parameters = new HashMap();
            parameters.put("ReportTitle", "列印名單");
            parameters.put("BaseDir", reportFile.getParentFile());


            jasperPrint =
                 JasperFillManager.fillReport(
                       jasperReport,
                       parameters,
                       new WebappDataSource()
                       );
                  session.setAttribute("ReportDuc", jasperPrint);
     }
     JRHtmlExporter exporter = new JRHtmlExporter();
         //*********************換頁設計 start*********************************/
     int pageIndex = 0;
     int lastPageIndex = 0;
     if (jasperPrint.getPages() != null)
     {
            lastPageIndex = jasperPrint.getPages().size() - 1;
     }
     String pageStr = request.getParameter("page");
     try
     {
            pageIndex = Integer.parseInt(pageStr);
     }
     catch(Exception e)
     {
            e.printStackTrace();
     }


     if (pageIndex < 0)
     {


                                                 23
pageIndex = 0;
     }


     if (pageIndex > lastPageIndex)
     {
             pageIndex = lastPageIndex;
     }
      //*********************換頁設計 end*********************************/
           StringBuffer sbuffer = new StringBuffer();
     exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
           exporter.setParameter(JRExporterParameter.OUTPUT_STRING_BUFFER, sbuffer);
           exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,
"../servlets/image?image=");
           exporter.setParameter(JRExporterParameter.PAGE_INDEX, new Integer(pageIndex));
     exporter.exportReport();
%>


<html>


<head>
  <style type="text/css">
     a {text-decoration: none}
  </style>


<meta http-equiv="Content-Type" content="text/html; charset=big5"></head>
<body text="#000000" link="#000000" alink="#000000" vlink="#000000" >
<table width="100%" border="0" align="center">
  <tr>
     <td width="10%">&nbsp;</td>
     <td width="82%"><hr size="1" color="#000000">
         <strong></strong></td>
     <td width="8%"><font size="4">列印</font></td>
  </tr>
  <tr>
     <td>&nbsp;</td>
     <td>
     <font size="2"><table width="100%" border="0">
           <tr>


                                                24
<td width="15%"><a href="print/printall.jsp" target="_blank">印報表<font
size="2">全</font></a><font color="#3366FF" size="4"><strong>|</strong></font>
               </td>
      <td width="1%">&nbsp;</td>
      <td width="15%"><div onClick="window.print()" style="cursor:hand"><font
color="#0033FF">印網頁</font><font color="#3366FF"
size="4"><strong>|</strong></font></div></td>
<script>
function isprint()
{
    if(confirm("列印此頁?"))
    window.open("print/printThis.jsp?index=<%=pageIndex%>","列印我");
}
</script>
      <td width="15%"><div onClick="isprint()" style="cursor:hand">印本頁<font
color="#3366FF" size="4"><strong>|</strong></font></div></td>


      <td width="10%"><a href="HtmlPrint.jsp?page=0">首頁</a><font color="#3366FF"
size="4"><strong>|</strong></font></td>
       <td width="10%"><a href="HtmlPrint.jsp?page=<%=pageIndex - 1%>">上頁</a><font
color="#3366FF" size="4"><strong>|</strong></font></td>
      <td width="10%"><a href="HtmlPrint.jsp?page=<%=pageIndex + 1%>">下頁</a><font
color="#3366FF" size="4"><strong>|</strong></font></td>


      <td width="10%"><a href="HtmlPrint.jsp?page=<%=lastPageIndex%>">尾頁</a><font
color="#3366FF" size="4"><strong>|</strong></font></td>
       <td width="15%"><a href="HtmlPrint.jsp?reload=true">重新下載</a><font
color="#3366FF" size="4"><strong>|</strong></font></td>


    </tr>
</table></font>




       </td>
      <td>示範</td>
    </tr>
</table>




                                              25
<hr>
<table width="100%" cellpadding="0" cellspacing="0" border="0">


  <tr>
     <td width="30%" height="33">&nbsp;</td>
     <td align="center"> <%=sbuffer.toString()%>   </td>
     <td width="27%">&nbsp;</td>
  </tr>
</table>
</body>
</html>



列印
<%
//out_demoprintprintThis.jsp
        String aa=request.getParameter("index");
        JasperPrint jasperPrint =
(JasperPrint)session.getAttribute("ReportDuc");
        JasperPrintManager.printPage(jasperPrint,Integer.parseInt(aa),false);


%>
//out_demoprintprintall.jsp
<%
        JasperPrint jasperPrint =
(JasperPrint)session.getAttribute("ReportDuc");
        JasperPrintManager.printReport(jasperPrint,true);

%>



其它輸出格式
包括有受歡迎的 pdf,以及 xls、csv、rtf 等。


PDF 輸出
程式碼:Out_demo/PdfShow.jsp

                                            26
在 Web.xml 設定,使用 jsp-file 做報表元件的話,於 web.xml 加上下述
<servlet>
    <servlet-name>pdf</servlet-name>
    <jsp-file>out_demo/PdfShow.jsp</jsp-file>
  </servlet>
<servlet-mapping>
    <servlet-name>pdf</servlet-name>
    <url-pattern>servlets/PdfShow.pdf</url-pattern>
  </servlet-mapping>

此外,如果是使用 servlet 做報表元件的話,於 web.xml 加上下述
<servlet>
    <servlet-name>pdfreport</servlet-name>
    <servlet-class>out_demo/PdfShow.jsp</servlet-class>
  </servlet>
<servlet-mapping>
    <servlet-name> pdfreport </servlet-name>
    <url-pattern>serlvers/PdfShow.pdf</url-pattern>
  </servlet-mapping>


                                     27
Excel 輸出
    程式碼:Out_demo/ExcelShow.jsp




圖表 1

    加這段文字於 web.xml
<servlet>
    <servlet-name>csvreport</servlet-name>
    <jsp-file>out_demo/CsvShow.jsp</jsp-file>
  </servlet>
<servlet-mapping>
    <servlet-name> csvreport </servlet-name>
    <url-pattern>servlets/CsvShow.csv</url-pattern>
  </servlet-mapping>



Xls 輸出
程式碼:Out_demo/XlsShow.jsp


                                     28
加這段文字於 web.xml
<servlet>
    <servlet-name>xslreport</servlet-name>
    <jsp-file>out_demo/XslShow.jsp</jsp-file>
  </servlet>
<servlet-mapping>
    <servlet-name>xslreport</servlet-name>
    <url-pattern> servlets/ XslShow.xls </url-pattern>
  </servlet-mapping>



RTF 輸出
程式碼:Out_demo/RtfShow.jsp




                                      29
加這段文字於 web.xml
<servlet>
    <servlet-name>rtfreport</servlet-name>
    <jsp-file>out_demo/Rtfshow.jsp</jsp-file>
  </servlet>
<servlet-mapping>
    <servlet-name>rtfreport</servlet-name>
    <url-pattern>servlets/Rtfshow.rtf</url-pattern>
  </servlet-mapping>




參考文件

1. 製作 iReport 的動畫教學:Tutorials
   http://jasperforge.org/sf/wiki/do/viewPage/projects.ireport/wiki/HomePage
2. http://www.cjsdn.net/post/view?bid=29&id=103643&sty=3:初階 user 可參考


              仍有許多不完美的地方,請多指教!!謝謝                                     From Amos


                                               30

Más contenido relacionado

Similar a Report out 2007final

Introduction To Direct Show
Introduction To Direct ShowIntroduction To Direct Show
Introduction To Direct Showguestce3937
 
Introduction To Direct Show
Introduction To  Direct ShowIntroduction To  Direct Show
Introduction To Direct Showguestce3937
 
Powerpoint使用指南
Powerpoint使用指南Powerpoint使用指南
Powerpoint使用指南verimportpig
 
Free Marker中文文档
Free Marker中文文档Free Marker中文文档
Free Marker中文文档yiditushe
 
Word 2010完全制霸
Word 2010完全制霸Word 2010完全制霸
Word 2010完全制霸皓仁 柯
 
系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章鍾誠 陳鍾誠
 
筆硯公文製作系統操作說明
筆硯公文製作系統操作說明筆硯公文製作系統操作說明
筆硯公文製作系統操作說明pesrdc006
 
CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)Chengjen Lee
 
Spm5 data analysis of fmri (chinese edition)
Spm5 data analysis of fmri (chinese edition)Spm5 data analysis of fmri (chinese edition)
Spm5 data analysis of fmri (chinese edition)Hanna LU
 
Bluemix node red-part iii
Bluemix node red-part iiiBluemix node red-part iii
Bluemix node red-part iiiJoseph Chang
 
Sql2005 reporting services報表設計
Sql2005 reporting services報表設計Sql2005 reporting services報表設計
Sql2005 reporting services報表設計iamhrm
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務台灣資料科學年會
 
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Chun-Min Chang
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in RChun-Ming Chang
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Chui-Wen Chiu
 
Hadoop基础及hive入门
Hadoop基础及hive入门Hadoop基础及hive入门
Hadoop基础及hive入门haiwang
 
ICT-old-ch19-converted.pptx
ICT-old-ch19-converted.pptxICT-old-ch19-converted.pptx
ICT-old-ch19-converted.pptxliutommy1
 

Similar a Report out 2007final (20)

Introduction To Direct Show
Introduction To Direct ShowIntroduction To Direct Show
Introduction To Direct Show
 
Introduction To Direct Show
Introduction To  Direct ShowIntroduction To  Direct Show
Introduction To Direct Show
 
Powerpoint使用指南
Powerpoint使用指南Powerpoint使用指南
Powerpoint使用指南
 
Free Marker中文文档
Free Marker中文文档Free Marker中文文档
Free Marker中文文档
 
Word 2010完全制霸
Word 2010完全制霸Word 2010完全制霸
Word 2010完全制霸
 
系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章
 
DNN
DNNDNN
DNN
 
DNN
DNNDNN
DNN
 
筆硯公文製作系統操作說明
筆硯公文製作系統操作說明筆硯公文製作系統操作說明
筆硯公文製作系統操作說明
 
CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)
 
Spm5 data analysis of fmri (chinese edition)
Spm5 data analysis of fmri (chinese edition)Spm5 data analysis of fmri (chinese edition)
Spm5 data analysis of fmri (chinese edition)
 
Bluemix node red-part iii
Bluemix node red-part iiiBluemix node red-part iii
Bluemix node red-part iii
 
Sql2005 reporting services報表設計
Sql2005 reporting services報表設計Sql2005 reporting services報表設計
Sql2005 reporting services報表設計
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務
 
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in R
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發
 
Hadoop基础及hive入门
Hadoop基础及hive入门Hadoop基础及hive入门
Hadoop基础及hive入门
 
2021laravelconftwslides12
2021laravelconftwslides122021laravelconftwslides12
2021laravelconftwslides12
 
ICT-old-ch19-converted.pptx
ICT-old-ch19-converted.pptxICT-old-ch19-converted.pptx
ICT-old-ch19-converted.pptx
 

Último

哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制jakepaige317
 
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxEDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxmekosin001123
 
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxEDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxmekosin001123
 
educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxeduc6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxmekosin001123
 
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书jakepaige317
 
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...黑客 接单【TG/微信qoqoqdqd】
 

Último (6)

哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
 
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxEDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptx
 
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxEDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
 
educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxeduc6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptx
 
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
 
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
 

Report out 2007final

  • 1. 目 錄 前言..........................................................................................................................................................2 壹.製作準備 .............................................................................................................................................2 (一)下載所需.........................................................................................................2 (二)環境建置.........................................................................................................3 貳.使用 Ireport 設計報表 ........................................................................................................................3 (一)報表欄位、變數與參數設定.........................................................................4 (1)Using Field ................................................................................................4 (2)Using Group ..............................................................................................5 (3)Using variable ...........................................................................................6 (4)Using Parameter ........................................................................................7 (二)報表內文設計.................................................................................................7 (1)設計報表架構...........................................................................................7 (2)加入報表物件...........................................................................................9 (3)編譯 JRxml 檔 ........................................................................................15 參.在網頁上執行 ...................................................................................................................................16 簡介 JasperReport API ........................................................................................16 程式撰寫..............................................................................................................18 HTML 輸出 .................................................................................................18 HTML 呈現 .................................................................................................20 HTML 預覽與列印 .....................................................................................22 其它輸出格式......................................................................................................26 PDF 輸出 .....................................................................................................26 Excel 輸出 ...................................................................................................28 Xls 輸出 .......................................................................................................28 RTF 輸出 .....................................................................................................29 參考文件................................................................................................................................................30 1
  • 2. 前言 本文流程是以一個案例來說明報表的製作,因此,其案例需求描述為:將一 份關鍵名單依照”城市別”作分群並記算其筆數,而後以報表印出。(本案例參考 來自:jasperReport_prj1.2.7 的 demo case。)因此,預期會有: 1. 製作「分群」的報表。過程會實作如何設定報表欄位、報表變數以及報表參 數。 2. 藉由 java 網頁程式,以實現用 Borwser 觀看常見的報表格式。 3. 簡介 JasperReport 關於報表輸出格式的 API。 最後,不免俗地,再 review 一下 JasperReport 之目的吧: The main purpose of JasperReports is to help create page-oriented ready-to-print documents in a simple and flexible manner。 壹.製作準備 (一)下載所需 1. Ireport1.2.7(內即附有 JasperReport.jar) http://prdownloads.sourceforge.net/ireport/iReport-1.2.7-windows-installer.e xe?download 2. ItextAsian.jar (當無此,如指定 pdf 為 output 文件,將無法顯示字型) http://itext.sourceforge.net/downloads/iTextAsian.jar 3. Tomcat4 or later http://tomcat.apache.org/ 4. JDK http://java.sun.com 2
  • 3. (二)環境建置 1. 為使編譯後的*.jasper 與*.jrxml 放在同一目錄: Options > 選項 > 編譯,勾選"編譯在報表資料夾"。 2. 設定外部程式 pdf: Options > 選項 > 外部程式,設定[pdf 預覽],找到 pdf 的執行程式 AcroRd32.exe。其它如 html, rtf, cvs 等亦是可設定。 3. 啟動一個 tomcat server。 貳.使用 Ireport 設計報表 本範例設計結果如下: 而其執行結果如下:(PDF format) 3
  • 4. (一)報表欄位、變數與參數設定 下拉式選單 檔案 > 開啟新檔,在”報表名稱”填入一報表名 稱”PrintReport.jrxml”,其它照預設。 在 檔案 > 存檔,存至<webroot>out_demoreports 下。 (1)Using Field 建立四個欄位,並在 預覽 > 報表欄位 > 新增,設定如下: 欄位名 屬性設定 City 預設 Id: [Field class type]:Java.lang.integer Name 預設 Street 預設 4
  • 5. (2)Using Group 預覽 > 報表群組 > 新增,新增設定如下: 一 群組欄位 屬性設定 CityGroup [Group expression] $F{City} [Min height to start new page] 60 [Group header(footer) band height] 20 Note: 在報表結構內會產生一”CityGroupHeader” 與”CityGroupFooter”,且[報表變數]會自動產生對應變數。 5
  • 6. (3)Using variable 在 預覽 > 報表變數 > 新增,設定如下: 變數名 屬性設定 CityNumber [Variable Name] CityNumber [class type] Integer [calcuation type] System [Reset type] Group [Reset group] Citygroup [Increment type] None [Initial value expression] ($V{CityNumber} != null)?(new Integer($V{CityNumber}.intValue() + 1)):(new Integer(1)) (注意不是 variable expression) 6
  • 7. (4)Using Parameter 在 預覽 > 報表參數 > 新增,新增設定如下: 參數名 屬性設定 BaseDir,報表之 Logo 圖 [Class type] java.lang.File 片的路徑指定。 勾選 is for prompt ReportTitle [Class type] java.lang.String 勾選 is for prompt (二)報表內文設計 (1)設計報表架構 要在報表內文加入各種物件前,先調整高度,以利配置物件: 在 預覽 > 欄,設定 Band height 7
  • 8. 分別設定如下: Document Struct Setup Title Band:height 50 PageHeader Band:height 20 ColumnHeader Band:height 0 CityGroupHeader Band:height 20 Detailer Band:height 20 CityGroupFooter Band:height 20 ColumnFooter Band:height 0 PageFooter Band:height 40 Summary Band:height 0 8
  • 9. (2)加入報表物件 (A)Title 欄 先取一 Frame 容器 ,並於其上放入下表所述物件: 報表物件 頁籤 屬性設定 9
  • 10. Image 【Image】 1.在[Image expresson]加入 new File($P{BaseDir}, "via.gif") 2.[Class]選 java.io.File 【Hyper-link】 1.[hyperlink target]:self 2.[hyperlink type]:reference 3.[hyperlink reference]加入 “www.viatech.com” Text Field 【Text Field】 [evaluation time]:Now [Textfield expression]:$P{ReportTitle} 【Font】 [Font name]新細明體(中文字型即可) [PDF font name] Msung-Light [PDF Encoding] UniCNS-UCS2-H (Chinese traditional) 勾取 PDF Embedded (B)PageHeader 設定如下: 報表物件 頁籤設定 屬性設定 【common】 [backgroup] ,[Foregroup] black Rectangle [top]:5 [left]:0 [height]:15 10
  • 11. Static text 【common】 [backgroup] black [Foregroup] white 分別設置三個: 【Font】 [Font name]新細明體(中文字型即可) ID,Name,Street [PDF font name] Msung-Light [PDF Encoding] UniCNS-UCS2-H (Chinese traditional) 勾取 PDF Embedded 【static Text】 分別填入”ID”,”姓名”,”住所街道” (C)CityGroupHeader 設定如下: 報表物件 頁籤 屬性設定 【common】 1.[bg],[fg]: 銀色 Rectangle TextField 【common】 勾選[transparent] (下方圖層看顯現出來) 【Font】 [Font name]新細明體(中文字型即可) [PDF font name] Msung-Light [PDF Encoding] UniCNS-UCS2-H (Chinese traditional) 勾取 PDF Embedded 11
  • 12. 【TextField】 [TextField Expression]: " "+ String.valueOf($V{CityNumber}) + ". " + String.valueOf($F{City}) 【Common】 依序設定 top, left, height 分別為 19, 0, 1 Line (D)Detailer 報表物件 頁籤 屬性設定 TextField 【TextField】 在[Textfield expression],分別對三個 物件加入: 分別加入 $F{Id} 三個: $F{Name} id,name,str $F{Street} eet 【Font】 [Font name]新細明體(中文字型即可) [PDF font name] Msung-Light [PDF Encoding] UniCNS-UCS2-H (Chinese traditional) 勾取 PDF Embedded 【Common】 依序設定 top,left,height:19, 0, 1 Line 12
  • 13. (E)CityGroupFooter 報表物件 頁籤 屬性設定 【common】 依序設定 top,left,height:19, 0, 1 Line Static text Count 【Static Text】加入文字 ”計數:” 【Font】 [Font name]新細明體(中文字型即可) [PDF font name] Msung-Light [PDF Encoding] UniCNS-UCS2-H (Chinese traditional) 勾取 PDF Embedded Text field 【Text Field】[Textfield expression] 加入 $V{CityGroup_COUNT} 【Font】 [Font name]新細明體(中文字型即可) [PDF font name] Msung-Light [PDF Encoding] UniCNS-UCS2-H (Chinese traditional) 勾取 PDF Embedded (F)PageFooter 13
  • 14. 報表物件 頁籤 屬性設定 【Common】 分別設定 Top,Left,Height:10, 0, 1 Line TextField 【Text Field】1. [Evaluation Time] now 2. [Textfield expression] "Page " + String.valueOf($V{PAGE_NUMBER}) + " of" TextField 【TextField】 1.[Evaluation time] Report 2.[TextField expression] " " + String.valueOf($V{PAGE_NUMBER}) TextField 【TextField】 1. [Evaluation time] Now 2. [Textfield expression] “關鍵名單” 註:上述三者 [Font name]新細明體(中文字型即可) [PDF font name] Msung-Light 的【Font】 [PDF Encoding] UniCNS-UCS2-H (Chinese traditional) 勾取 PDF Embedded 設計完後,大致對照如下圖: 14
  • 15. (3)編譯 JRxml 檔 將設計好的 JRxml 檔作編譯,建立 > 編譯,編譯後的檔案(jasper),會 放置於同目錄內。此外,亦可於 ireport 直接執行報表(先決定要預覽的 format) 15
  • 16. 參.在網頁上執行 簡介 JasperReport API 該架構圖主要呈現與報表輸出有關的 API,其由上而下的順序,使得以瞭解 報表中介過程中所會使用的程式介面為何,如此,將有助程式員之程式的開發。 下方會展示不同格式文件的輸出,將會用到架構圖上的所列 API。 各項類別的內容可參閱官方 JasperRepor API http://jasperreports.sourceforge.net/api/index.html。 jasperReport 類別 功能說明 JasperCompilerManager 負責將*.jrxml 編譯成*.jasper or JasperReport 物 件。 JasperFillManger 負責將*.jasper 轉製成*.jrprint or JasperPrint 物 件。 JasperRunManager 負責將*.jasper 轉製成所需輸出格式的文件。 Jr***Export 負責將*.jrprint or JasperPrint 物件轉製成所需輸 包括有: 出格式的文件。 JexcelApiExporter JRCvsExporter JRHtmlExporter JRPdfExporter JRRtfExporter 等 JasperExportManager 負責將*.jrprint or JasperPrint 物件轉製成所需輸 出格式的文件。 JasperPrintManager 負責將*.jrprint or JasperPrint 物件列印出。 16
  • 17. JasperReport 輸出相關 API 架構圖 *.Jrxml 檔 JasperCompilerManager Class 之方法 JapserReport 物件 *.Jasper 檔 JasperFillManger Class 之方法 *.Jrprint 檔 JasperPrint 物件 JasperRunManager Class Jr***Export 之方法 Class 之方法 JasperExportManager Class 之方法 不同文件格式輸出檔 (如 Html, Rtf, Pdf 等) JasperPrintManager Class 之方法 文 件 17
  • 18. 程式撰寫 HTML 輸出 Out_demo/HtmlOutput.jsp <%-- HTML 文件輸出(在同一目錄下) --%> <%@ page contentType="text/html; charset=Big5" %> <%@ page import="datasource.*" %> <%@ page import="net.sf.jasperreports.engine.*" %> <%@ page import="net.sf.jasperreports.engine.util.*" %> <%@ page import="net.sf.jasperreports.engine.export.*" %> <%@ page import="net.sf.jasperreports.j2ee.servlets.*" %> <%@ page import="java.util.*" %> <%@ page import="java.io.*" %> <% //取得並讀取 jasper 檔,以取得 jasperReport 物件 File reportFile = new File(application.getRealPath("/out_demo/reports/PrintReport.jasper"));//注意*.jasper 之路徑 if (!reportFile.exists()) throw new JRRuntimeException("File PrintReport.jasper not found. The report design must be compiled first."); JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath()); //設定報表參數 Map parameters = new HashMap(); parameters.put("ReportTitle", "地址表列"); parameters.put("BaseDir", reportFile.getParentFile()); //取得 jasperPrint 物件,但並未實際產生列表檔 JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, 18
  • 19. parameters, new WebappDataSource() ); JRHtmlExporter exporter = new JRHtmlExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);//指定要輸 入的列表檔 File destFile = new File(reportFile.getParent(), jasperPrint.getName() + ".Html"); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString());//指定輸出名稱 //*****可在輸出的 html 檔內加入一些文字,包括:檔頭、頁間、檔尾。**** // exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER, "hello amos"); // exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "mary is good"); // exporter.setParameter(JRHtmlExporterParameter.HTML_FOOTER, "life is dream"); exporter.exportReport();//執行 %> <html> <body> 已成功輸出一個 html 檔! </body> </html> 19
  • 20. HTML 呈現 Out_demo/HtmlShow.jsp <%-- Html 文件呈現(在同一目錄下) --%> <%@ page contentType="text/html; charset=Big5" %> <%@ page import="datasource.*" %> <%@ page import="net.sf.jasperreports.engine.*" %> <%@ page import="net.sf.jasperreports.engine.util.*" %> <%@ page import="net.sf.jasperreports.engine.export.*" %> <%@ page import="net.sf.jasperreports.j2ee.servlets.*" %> <%@ page import="java.util.*" %> <%@ page import="java.io.*" %> <% //取得並讀取 jasper 檔,以取得 jasperReport 物件 File reportFile = new File(application.getRealPath("/out_demo/reports/PrintReport.jasper")); 20
  • 21. if (!reportFile.exists()) throw new JRRuntimeException("File PrintReport.jasper not found. The report design must be compiled first."); JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath()); //設定報表參數 Map parameters = new HashMap(); parameters.put("ReportTitle", "地址表列"); parameters.put("BaseDir", reportFile.getParentFile()); //取得 jasperPrint 物件,但並未實際產生列表檔 JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, parameters, new WebappDataSource() ); JRHtmlExporter exporter = new JRHtmlExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);//指定要輸 入的列表檔 File destFile = new File(reportFile.getParent(), jasperPrint.getName() + ".Html"); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString());//指定輸出名稱 //******非常重要的功能 分頁 指定 pageIndex 可使 scroll_bar auto_move************* : ; , // exporter.setParameter(JRExporterParameter.PAGE_INDEX, new Integer(pageIndex)); exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);//輸出文件於 response 網頁上 //指定文件圖檔部份,無設此者,僅呈現文字 exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "../servlets/image?image="); exporter.exportReport();//執行 %> <html> <head> 21
  • 22. <title> 已成功呈現一個 html 檔! </title> </head> <body> 已成功輸出一個 html 檔! </body> </html> HTML 預覽與列印 預覽 Out_demo/HtmlPrint.jsp <%-- 針對 HTML 的列印需求,包括"預覽列印"、"列印單頁報表"、"列印全部報表" --%> <%@ page contentType="text/html; charset=big5" %> <%@ page import="datasource.*" %> <%@ page import="net.sf.jasperreports.engine.*" %> <%@ page import="net.sf.jasperreports.engine.util.*" %> <%@ page import="net.sf.jasperreports.engine.export.*" %> <%@ page import="net.sf.jasperreports.j2ee.servlets.*" %> <%@ page import="java.util.*" %> <%@ page import="java.io.*" %> <% JasperPrint jasperPrint=null; jasperPrint=(JasperPrint)session.getAttribute("ReportDuc"); if (request.getParameter("reload") != null || jasperPrint == null) { File reportFile = new File(application.getRealPath("/out_demo/reports/PrintReport.jasper")); if (!reportFile.exists()) 22
  • 23. throw new JRRuntimeException("File PrintReport.jasper not found. The report design must be compiled first."); JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath()); Map parameters = new HashMap(); parameters.put("ReportTitle", "列印名單"); parameters.put("BaseDir", reportFile.getParentFile()); jasperPrint = JasperFillManager.fillReport( jasperReport, parameters, new WebappDataSource() ); session.setAttribute("ReportDuc", jasperPrint); } JRHtmlExporter exporter = new JRHtmlExporter(); //*********************換頁設計 start*********************************/ int pageIndex = 0; int lastPageIndex = 0; if (jasperPrint.getPages() != null) { lastPageIndex = jasperPrint.getPages().size() - 1; } String pageStr = request.getParameter("page"); try { pageIndex = Integer.parseInt(pageStr); } catch(Exception e) { e.printStackTrace(); } if (pageIndex < 0) { 23
  • 24. pageIndex = 0; } if (pageIndex > lastPageIndex) { pageIndex = lastPageIndex; } //*********************換頁設計 end*********************************/ StringBuffer sbuffer = new StringBuffer(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_STRING_BUFFER, sbuffer); exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "../servlets/image?image="); exporter.setParameter(JRExporterParameter.PAGE_INDEX, new Integer(pageIndex)); exporter.exportReport(); %> <html> <head> <style type="text/css"> a {text-decoration: none} </style> <meta http-equiv="Content-Type" content="text/html; charset=big5"></head> <body text="#000000" link="#000000" alink="#000000" vlink="#000000" > <table width="100%" border="0" align="center"> <tr> <td width="10%">&nbsp;</td> <td width="82%"><hr size="1" color="#000000"> <strong></strong></td> <td width="8%"><font size="4">列印</font></td> </tr> <tr> <td>&nbsp;</td> <td> <font size="2"><table width="100%" border="0"> <tr> 24
  • 25. <td width="15%"><a href="print/printall.jsp" target="_blank">印報表<font size="2">全</font></a><font color="#3366FF" size="4"><strong>|</strong></font> </td> <td width="1%">&nbsp;</td> <td width="15%"><div onClick="window.print()" style="cursor:hand"><font color="#0033FF">印網頁</font><font color="#3366FF" size="4"><strong>|</strong></font></div></td> <script> function isprint() { if(confirm("列印此頁?")) window.open("print/printThis.jsp?index=<%=pageIndex%>","列印我"); } </script> <td width="15%"><div onClick="isprint()" style="cursor:hand">印本頁<font color="#3366FF" size="4"><strong>|</strong></font></div></td> <td width="10%"><a href="HtmlPrint.jsp?page=0">首頁</a><font color="#3366FF" size="4"><strong>|</strong></font></td> <td width="10%"><a href="HtmlPrint.jsp?page=<%=pageIndex - 1%>">上頁</a><font color="#3366FF" size="4"><strong>|</strong></font></td> <td width="10%"><a href="HtmlPrint.jsp?page=<%=pageIndex + 1%>">下頁</a><font color="#3366FF" size="4"><strong>|</strong></font></td> <td width="10%"><a href="HtmlPrint.jsp?page=<%=lastPageIndex%>">尾頁</a><font color="#3366FF" size="4"><strong>|</strong></font></td> <td width="15%"><a href="HtmlPrint.jsp?reload=true">重新下載</a><font color="#3366FF" size="4"><strong>|</strong></font></td> </tr> </table></font> </td> <td>示範</td> </tr> </table> 25
  • 26. <hr> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td width="30%" height="33">&nbsp;</td> <td align="center"> <%=sbuffer.toString()%> </td> <td width="27%">&nbsp;</td> </tr> </table> </body> </html> 列印 <% //out_demoprintprintThis.jsp String aa=request.getParameter("index"); JasperPrint jasperPrint = (JasperPrint)session.getAttribute("ReportDuc"); JasperPrintManager.printPage(jasperPrint,Integer.parseInt(aa),false); %> //out_demoprintprintall.jsp <% JasperPrint jasperPrint = (JasperPrint)session.getAttribute("ReportDuc"); JasperPrintManager.printReport(jasperPrint,true); %> 其它輸出格式 包括有受歡迎的 pdf,以及 xls、csv、rtf 等。 PDF 輸出 程式碼:Out_demo/PdfShow.jsp 26
  • 27. 在 Web.xml 設定,使用 jsp-file 做報表元件的話,於 web.xml 加上下述 <servlet> <servlet-name>pdf</servlet-name> <jsp-file>out_demo/PdfShow.jsp</jsp-file> </servlet> <servlet-mapping> <servlet-name>pdf</servlet-name> <url-pattern>servlets/PdfShow.pdf</url-pattern> </servlet-mapping> 此外,如果是使用 servlet 做報表元件的話,於 web.xml 加上下述 <servlet> <servlet-name>pdfreport</servlet-name> <servlet-class>out_demo/PdfShow.jsp</servlet-class> </servlet> <servlet-mapping> <servlet-name> pdfreport </servlet-name> <url-pattern>serlvers/PdfShow.pdf</url-pattern> </servlet-mapping> 27
  • 28. Excel 輸出 程式碼:Out_demo/ExcelShow.jsp 圖表 1 加這段文字於 web.xml <servlet> <servlet-name>csvreport</servlet-name> <jsp-file>out_demo/CsvShow.jsp</jsp-file> </servlet> <servlet-mapping> <servlet-name> csvreport </servlet-name> <url-pattern>servlets/CsvShow.csv</url-pattern> </servlet-mapping> Xls 輸出 程式碼:Out_demo/XlsShow.jsp 28
  • 29. 加這段文字於 web.xml <servlet> <servlet-name>xslreport</servlet-name> <jsp-file>out_demo/XslShow.jsp</jsp-file> </servlet> <servlet-mapping> <servlet-name>xslreport</servlet-name> <url-pattern> servlets/ XslShow.xls </url-pattern> </servlet-mapping> RTF 輸出 程式碼:Out_demo/RtfShow.jsp 29
  • 30. 加這段文字於 web.xml <servlet> <servlet-name>rtfreport</servlet-name> <jsp-file>out_demo/Rtfshow.jsp</jsp-file> </servlet> <servlet-mapping> <servlet-name>rtfreport</servlet-name> <url-pattern>servlets/Rtfshow.rtf</url-pattern> </servlet-mapping> 參考文件 1. 製作 iReport 的動畫教學:Tutorials http://jasperforge.org/sf/wiki/do/viewPage/projects.ireport/wiki/HomePage 2. http://www.cjsdn.net/post/view?bid=29&id=103643&sty=3:初階 user 可參考 仍有許多不完美的地方,請多指教!!謝謝 From Amos 30