JasperReport 類介紹

 

JasperReport

2.1      簡介

JasperReport 是產生報表的核心部分,首先要先有個xml文件,然後根據jasperreports.dtd編譯成jasper文件(以.jasper結尾),我們真正 要使用的是編譯以後的.jasper文件。xml文件的內容包括對報表樣式的定義,數據來源,參數等等,它可以支持的輸出格 式:PDF,HTML,XML,XLS,CVS等。

在沒有iReport之前,需要花費大量的時間去熟悉JasperReport的文檔以及自己去寫定義報表的xml,現在你一定對iReport的作用有些瞭解吧

 

2.2      工作流程介紹

 

 

如果我們已經用iReport已經將xml編譯爲.japser文件後,上圖中編譯部分的工作就可以省略,JasperFillManager根據 定義的數據源和報表模版填充jasperPrint,有數據的報表就在這個部分填充的。如果我們要導出到不同類型的檔案,則需要通過 JasperExportMananger,也可以自己寫一個類,但是要實現net.sf.jasperreports.engine. JRExporter這個接口。JaserReport提供的exporter再下面一節介紹。

 

2.3      重要的Class和Interface詳細介紹

Ø         Class net.sf.jasperreports.engine.JasperReport

 

這個類的對象通過net.sf.jasperreports.engine.util.JRLoader從.jasper文件中獲取,爲用數據填充 和產生報表做準備,當用數據填充報表的時候,運行時求各種各樣報表表達式的值。對象中包含了報表的各種元素,例如報表的大小,顯示位置,顯示的欄位,圖片 信息等等。

 

Ø         Class net.sf.jasperreports.engine.util.JRLoader

 

所有JasperReports 主要的功能,象報表編輯,報表填充及導出,經常用到序列化的對象,net.sf.jasperreports.engine.util.JRLoader可以幫助從文件或者URLs或者輸入流中裝載這些被序列化的對象。

 

Ø         Class net.sf.jasperreports.engine.JasperPrint

 

這個類的對象是通過填充類根據net.sf.jasperreports.engine.JasperReport的對象用數據填充後的結果,這樣可以被很直觀的被別的類引用,將報表輸出到網絡或者文件

 

Ø         Interface net.sf.jasperreports.engine.JRDataSource

 

JasperReports是一個非常靈活的報表工具,在數據來源方面更是體現了這一點,程序員可以自己定義不同類型的數據源,前提是實現這個接 口,我們的數據源就可以千變萬化,數據源可以是XML,CSV,TEXT,Object List 等等,在後面的章節詳細描述如何實現該接口

 

Ø         Class net.sf.jasperreports.engine.export.JExcelApiExporter

 

報表產生到一個EXCEL文檔,如果報表裏面有圖形,一定要用這個exporter

 

Ø         Class net.sf.jasperreports.engine.export.JRCsvExporter

 

報表產生到一個CVS文檔

 

Ø         Class net.sf.jasperreports.engine.export.JRGraphics2Dexporter

 

報表輸出到Graphics2D,Java2D應用的時候纔會用到

 

Ø         Class net.sf.jasperreports.engine.export.JRHtmlExporter

 

報表產生到一個HTML文檔

 

Ø         Class net.sf.jasperreports.engine.export.JRPdfExporter

 

報表產生到一個PDF文檔

 

Ø         Class net.sf.jasperreports.engine.export.JRRtfExporter

 

報表產生到一個RTF文檔

 

Ø         Class net.sf.jasperreports.engine.export.JRTextExporter

 

報表產生到一個TXT文檔

 

Ø         Class net.sf.jasperreports.engine.export.JRXlsExporter

 

報表產生到EXCEL文檔,用這個exporter,報表中的圖形將不被輸出

 

Ø         Class net.sf.jasperreports.engine.export.JRTextExporter

 

報表產生到XML文檔

 

2.4      Exporter常用參數說明

Ø         net.sf.jasperreports.engine.JRExporterParameter. JASPER_PRINT

這個參數是net.sf.jasperreports.engine.JasperPrint的對象,exporter在導出報表前會做檢測

 

Ø         net.sf.jasperreports.engine.JRExporterParameter. JASPER_PRINT_LIST

這個參數是包含了n個net.sf.jasperreports.engine.JasperPrint對象的java.util.List,exporter在導出報表前會做檢測

 

Ø         net.sf.jasperreports.engine.JRExporterParameter.INPUT_STREAM

這個參數是net.sf.jasperreports.engine.JasperPrint被序列化對象的輸入流,exporter在導出報表前會做檢測

 

Ø         net.sf.jasperreports.engine.JRExporterParameter.INPUT_URL

這個參數是包含net.sf.jasperreports.engine.JasperPrint被序列化對象的URL,exporter在導出報表前會做檢測

 

Ø         net.sf.jasperreports.engine.JRExporterParameter.INPUT_FILE_NAME

這個參數是存儲了net.sf.jasperreports.engine.JasperPrint被序列化對象的文件路徑,exporter在導出報表前會做檢測

 

注意:以上幾個參數不能全部爲空

 

Ø         net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_STRING_BUFFER

這個參數是java.lang.StringBuffer的對象,存儲已經產生出的指定格式報表的內容

 

Ø         net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_WRITER

這個參數是java.io.Writer的對象,將指定格式報表的內容發送到一個字符流,例如Servlet的PrintWriter

 

Ø         net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_STREAM

這個參數是java.io.OutputStream的對象,將指定格式報表的內容發送到一個輸出流,例如ServletOutputStream

 

Ø         net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_FILE

這個參數是java.io.FILE的對象,將指定格式報表的內容存儲到文件裏面

 

Ø         net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_FILE_NAME

這個參數是java.lang.String的對象,將指定格式報表的內容存儲到文件裏面

 

Ø         net.sf.jasperreports.engine.JRExporterParameter.CHARACTER_ENCODING

這個參數是java.lang.String的對象,指定格式報表的內容編碼

 

 

Ø         net.sf.jasperreports.engine.JExcelApiExporterParameter.IS_FONT_SIZE_FIX_ENABLED

這個參數是java.lang.Boolean的對象,是否允許自動修正Excel每個欄位的大小

 

 

Ø         net.sf.jasperreports.engine.JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET

這個參數是java.lang.Boolean的對象,每一頁是否用一個Sheet

 

Ø         net.sf.jasperreports.engine.JRXlsExporterParameter. IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS

這個參數是java.lang.Boolean的對象,是否移除行與行之間的空行

 

Ø         net.sf.jasperreports.engine.JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND

這個參數是java.lang.Boolean的對象,頁面的背景是否爲白的

 

Ø         net.sf.jasperreports.engine.JRXlsExporterParameter.SHEET_NAMES

這個參數是java.lang.String的對象,Sheet的名字

 

Ø         net.sf.jasperreports.engine.JRCsvExporterParameter.FIELD_DELIMITER

這個參數是java.lang.String的對象,欄位之間的分隔符

 

Ø         net.sf.jasperreports.engine.JRCsvExporterParameter.RECORD_DELIMITER

這個參數是java.lang.String的對象,欄位之間的分隔符

 

Ø         net.sf.jasperreports.engine.JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR

這個參數是java.lang.Boolean的對象,是否輸出圖片到目錄

 

Ø         net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_DIR_NAME

這個參數是java.lang.String的對象,圖片目錄的絕對路徑

 

Ø         net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_DIR

這個參數是java.io.File的對象,圖片目錄

 

Ø         net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_URI

這個參數是java.lang.String的對象,通過Web訪問時圖片的URI

 

 

2.5      JasperReport內置的常用參數說明

這些參數是放到java.util.Map,在填充報表的時候使用

Ø         REPORT_CONNECTION

這個參數是java.sql.Connection對象,在用Report Query的時候調用

 

Ø         REPORT_DATASOURCE

這個參數是實現了接口net.sf.jasperreports.engine.JRDataSource的對象,在填充報表的時候調用

 

Ø         IS_IGNORE_PAGINATION

這個參數是java.lang.Boolean對象,報表是否忽略分頁

 

Ø         REPORT_MAX_COUNT

這個參數是java.lang.Integer對象,報表顯示的最大記錄數

 

Ø         DRAWING_SUPPLIER

這個參數是實現了接口org.jfree.chart.plot.DrawingSupplier對象,定義自己的填充色

這個參數不是原來JasperReport定義的,是後來加上的

 

2.6      JasperReport內置的常用變量說明

 

Ø         PAGE_NUMBER

當前頁面的頁碼,即第幾頁

 

Ø         REPORT_COUNT

整個報表填充完成後,總的記錄數

 

Ø         PAGE_COUNT

當前頁面的記錄數

 

Ø         COLUMN_COUNT

當前記錄的行數,每個頁面的計數會復位後重新計算。

 

2.7      如何實現接口JRDataSource

當調用填充報表過程的時候,負責填充的類會通過這個接口獲取到相應的數據,jasperreport提供了幾個實現了這個接口的類:

      

Ø         net.sf.jasperreports.engine.JRResultSetDataSource

這個是通過JDBC訪問關係數據庫得到的數據源

 

 

 

Ø         net.sf.jasperreports.engine.data.JRTableModelDataSource

這個是調用Java Swing tables得到的數據源

 

Ø         net.sf.jasperreports.engine.data.JRBeanCollectionDataSource

這個是調用collections得到的數據源

 

我們要定義自己的DataSource,需要實現下面兩個方法:

²        public boolean next() throws JRException;

報表填充數據的時候,填充每一條記錄之前都會調用這個方法,將指針移動到下一條數據,如果有下一條數據返回true,否則返回false。

²         public Object getFieldValue(JRField jrField) throws JRException;

當填充報表的每一個欄位的時候,會調用這個方法獲取填充的值。JrField是報表裏面定義顯示欄位的對象。在iReport工具裏面可以定義jrField的名字類型以及description

2.8      JasperReport如何繪製圖形報表

JasperReport本身是不繪製圖形報表的,JasperReport是通過調用JFreeChart產生的image顯示到報表的頁面裏,所以我們還需要再瞭解JFreeChart,我們將再後面的章節介紹JFreeChart。

 

 

 

3         iReport

3.1      簡介

iReport 就是一個可視化的報表製作工具,代替原來人工書寫定義報表的xml,我們可以用iReport做下面的一些工作:

n         用iReport可以畫出我們需要的報表的模版,例如在某個位置顯示甚麼內容,顯示風格的定義等等

n         定義需要傳給jasperReport的參數,例如前面一章將提到的內置參數,也可以自定義需要傳遞的參數

n         iReport的提供的功能可以預覽報表

n         將報表模版的xml編譯爲.jasper文件,供jasperreport調用生成我們需要的報表

n         除了可以使用前面一章提到的內置變量,我們也可以定義自己的變量

 

 

 

 

3.2      報表模版佈局

3.2.1 區域位置介紹

 

      一般情況下規則如下:

n         title

這個區域的資料整個報表只顯示一次

 

n         pageHeader

這個區域的資料每一頁的頂部顯示一次

 

n         columnHeader

這個區域的資料每一頁的頂部顯示一次,位置在pageHeader的後面

 

n         detail

這個區域的資料有多少筆記錄就顯示多少次

 

n         columnFooter

這個區域的資料每一頁的底部只顯示一次,位置在pageFooter,lastPageFooter的前面

 

n         pageFooter

這個區域的資料每一頁的底部只顯示一次,如果有定義lastPageFooter,則最後一頁不顯示

 

n         lastPageFooter

這個區域的資料在報表最後一頁的底部只顯示一次

 

n         summary

這個區域的資料在最後一條記錄後面顯示,位置在columnFooter, pageFooter,lastPageFooter的前面

3.2.2 如何設置區域

點擊工具欄的 ,會彈出下面的窗口,在Band height處輸入高度後,點Apply按鈕就可以了。

 

 

3.3      如何定義Fields,Parameters,Variables

報表的顯示數據基本由這三個部分組成。

Fields指的是定義的數據源中對象的屬性

Parameters指的是在調用填充報表的對象前,將所需要的參數放到Map對象裏

Variables指的是按一定的邏輯通過調用Fields或者Parameters或者Variables組織一個計算表達式

 

點擊工具欄 ,彈出一個對象屬性的窗口

Ø         Fields

點擊新增按鈕增加一個field,field包括3個特性:

name:唯一標識

Class type:表示field是哪個類的對象例如:java.lang.Integer等等,不能爲基本變量類型如int,double等

Description:field的描述,在特定應用時會用到,例如自己定義的xml數據源,可能需要從不同的Node獲取資料,這個時候需要通過description來識別,在後面的具體制作報表的時候可以看到這點。

JasperReport會通過這幾個屬性產生一個JRField的對象。

在報表模版裏書寫的標識爲$F{field name}

 

Ø         Variables

我們可以看到裏面已經有一些變量了,這些就是在JasperReport提到的它的內置變量。

點擊新增按鈕,彈出的窗口中包括定義Variable name,Variable class type, Calculation type,Variable expression,Initial value expression等等。

Variable name :變量的名字可以和Fields或者Parameters的名字相同,但是不能和其他的變量名字一樣

Variable class type:表示變量是哪個類的對象,例如java.lang.Integer等等,不能爲基本變量類型如int,double等

Calculation type:常用的包括count,sum, average等等

Variable expression:可以是之前的$F{field name},也可以是自己或者其它的變量

Initial value expression:類型一定要和選擇的Variable class type一致

 

在報表模版裏書寫的標識爲$V{variable name}

 

Ø         Parameters

我們可以看到裏面已經有一些參數的定義了,這些就是在JasperReport提到的它的內置參數。

點擊新增按鈕,彈出的窗口中包括定義Parameter name,Parameter class type, Parameter default value,Parameter description等等

Parameter name:參數名稱,其實就是Map的key,所以參數名稱不能重複

Parameter class type:表示參數是那個類的對象,即Map中key對應的對象類型

Parameter default value:表示參數爲空的時候,賦與的一個值,類型必須和選擇的Parameter class type一致

Parameter description:描述欄位,保留欄位

 

在報表模版裏書寫的標識爲$P{parameter name}

3.4      報表模版主要元件

所有元件在正確的區域內時,當鼠標點擊該元件,邊框顏色均爲藍色

如果不在正確的區域時,當鼠標點擊該元件,邊框顏色爲紅色

如果多個元件重疊,當鼠標點擊該元件,邊框顏色爲綠色

 

所有元件基本有共同的幾個屬性,右鍵點擊元件從彈出的菜單中選擇properties,彈出一個屬性窗口:

Common裏面包括:綁定的區域信息,絕對位置和大小,前景色,背景色等等。

Print when expression表示滿足甚麼條件的時候顯示,表達式必須返回一個Boolean的對象

Font裏面包括:字體大小,文字位置,文字字體等等,如果是中文或者是亞洲其他語言,當輸出爲PDF格式時候,需要設定Font是:

 

Language
PDF Font Name

Simplified Chinese

STSong-Light

Traditional Chinese

MHei-Medium

MSung-Light

Japanese

HeiseiKakuGo-W5

HeiseiMin-W3

Korean

HYGoThic-Medium

HYSMyeongJo-Medium

 

 

Border裏面包括:邊框的線條顏色,粗細,框內文字距離邊框的距離等等

3.4.1 直線

點擊工具欄 ,可以在報表的任意區域畫一條直線

 

3.4.2 靜態的文字

點擊工具欄 ,可以在任意區域畫一個文本框, 在它的屬性窗口輸入想要顯示的文字

 

3.4.3 文字字段

點擊工具欄 ,可以在任意區域畫一個文本框,在屬性框輸入要顯示的Field, Variable,Parameter

Textfield Expression Class:必須和定義的類型一致,目前只支持下面的類型:

java.lang.Boolean

java.lang.Byte

java.util.Date

java.sql.Timestamp

java.lang.Double

java.lang.Float

java.lang.Integer

java.lang.Long

java.lang.Short

java.math.BigDecimal

java.lang.String

 

Evaluation time:賦值時間一般選擇now

Stretch with overflow:當文字超出邊框時是否自動延長

Banlk when null:當內容爲空指針的時候是否顯示空格

Pattern:顯示的式樣,如果爲Number類型或者日期類型時可以建立特定的顯示式樣

Textfield expression:表達式可以爲$F{field},$V{variable},$P{parameter}

 

 

3.4.4 圖象

點擊工具欄 ,可以在任意區域插入圖象,在屬性窗口輸入圖象的來源

Image Expression:圖象來源的表達式,一般情況下選擇Image Expression Class爲java.lang.String時,表達式爲圖象的絕對路徑,可以通過$F{field},$P{parameter}來傳遞,也可以通過 Find按鈕找到本地需要顯示的圖象路徑。

Image Expression Class:圖象來源的對象類型,根據不同的類型,Image Expression就要傳遞該類型的對象

 

3.4.5 子報表

點擊工具欄的 ,可以在detail,summary區域插入子報表,下面是子報表的屬性:

u       窗口1

Paramters Map Expression:這個是傳遞給子報表的參數表,類型一定是java.util.Map,子報表的參數還可以通過別的方式傳遞,在下面窗口2中有描述。

Connetion / Datasouce Expression:這個是子報表的數據源,一般情況下是用JRDataSource,這裏寫的$P{MY_DATA_SOURCE},表示子報表數據源是通過父報表參數傳遞的,因此要在參數表那裏定義。

u       窗口2

Subreport Expression Class:子報表的類型,通常選擇如圖中所示的類型,這個參數也是通過父報表的參數來傳遞,因此要在參數中定義它。

SubReport parameters:子報表的參數,這個地方的參數和窗口1的Paramters Map功能一樣,提供參數給子報表,區別是這個地方可以將父報表的一些具體的資料通過map傳遞給子報表。

 

3.4.6 圖形報表

點擊工具欄的 ,可以在任何區域插入它,具體的圖形報表製作將在後面的章節詳細描述。

3.5      編譯報表

當我們畫好報表模版後,保存到硬盤上的只是xml 檔案,因此需要編譯爲.jasper的檔案,

點擊工具欄的 ,如果我們畫好的報表沒有問題,將產生一個.jasper的檔案,如果有錯誤,將在iReport的下方信息窗口顯示出錯的信息,爲我們糾正錯誤提供幫助。

 

4         JFreeChart

4.1      簡介

主要用來開發各種各樣的圖形報表,這些圖形報表包括:餅圖、柱狀圖(普通柱狀圖以及堆棧柱狀圖)、線圖、區域圖、分佈圖、混合圖、甘特圖以及一些儀 錶盤等等。在這些不同式樣的圖形報表上可以滿足目前商業系統的要求。JFreeChart是一種基於JAVA 2D的圖形報表開發技術。JFreeChart可用於Servlet、JSP、Applet、Java Appication環境中,通過JDBC可動態顯示任何數據庫數據,結合Itext可以輸出至PDF文檔。

 

 

4.2      幾個重要的Class和Interface介紹

 

Ø         Class org.jfree.chart.ChartFactory

這個類負責產生各種圖形的org.jfree.chart.JFreeChart的對象,JasperReport通過調用org.jfree.chart.ChartFactory的方法獲取到相應圖形的org.jfree.chart.JfreeChar的對象。

 

Ø         Class org.jfree.chart.JFreeChart

這個類實現了Java 2D APIs,它的目的是在Java 2D graphics device上繪出想要的圖像

 

Ø         Interface org.jfree.data.category.CategoryDataset

用於圖形生成所要的數據集對象,實現這個接口的Dataset主要用於3D數據,例如Bar,Group Bar,Line,StackedBar 等等

 

Ø         Interface org.jfree.data.category.PieDataset

用於圖形生成所要的數據集對象,實現這個接口的Dataset主要用於2D數據,例如Pie

 

Ø         Interface org.jfree.chart.plot.DrawingSupplier

java.awt.Paint及java.awt.Stroke 對象的提供者,可以通過實現它自己定義Chart的顏色

 

Ø         Abstract Class org.jfree.chart.plot.Plot

這個抽象類以及所有子類做爲org.jfree.chart.JFreeChart的代理,在Java 2D graphics device繪出座標以及數據區域的圖像

 

Ø         Abstract Class org.jfree.chart.renderer.AbstractRenderer

這個抽象類以及所有子類主要用在3D數據時在Java 2D graphics device繪出每個區域的顏色,每個區域輪廓的顏色,每個區域上的數值

 

 

4.3      JasperReport如何調用JFreeChart產生圖形報表

JasperReport在用數據填充報表時,根據圖形報表的類型,生成對應的JFreeChart的Dataset對象,再調用 org.jfree.chart.ChartFactory產生出對應的org.jfree.chart.JFreeChart對象。獲取到該對象 後,JasperReport在exporter裏建立一個java.awt.image.BufferedImage對象,

BufferedImage返回一個java.awt.Graphics2D對象,再將它傳入給之前JFreeChart對象,最後調用JFreeChart對象的draw方法將圖形輸出到BufferedImage對象,供給Exporter使用。


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/feidragon319/archive/2008/02/19/2107215.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章