使用iReport製作報表的詳細過程(Windows環境下)

文章將會涉及3個方面的內容:

第一部分:使用iReport製作報表的詳細過程(Windows環境下)

第二部分:使用Jasperreport作爲報表控件開發胖客戶端報表應用

第三部分:使用Jasperreport作爲報表控件開發Web報表應用

1、前言

在網絡上可以搜索到很多使用iReportJasperreport配合實現各種報表任務的文章,但是我覺得很少有一篇(幾乎沒有)做一個比較詳細的介紹如何使用iReport製作報表的全過程,我所看過的文章的基本思想是覆蓋面廣,很多內容都是提及即過,並不是開發人員都有時間爲每個實踐花費時間自己實現,如果能有更詳細的資料,那豈不是一件樂事。出於這個念頭促使我寫這篇文章,希望能對那些使用iReportJasperreport朋友有所幫助,特別是需要親身去實現報表的朋友,希望能給你們帶來一點幫助。本文不是對iReport的每個細節進行介紹,關於iReport的每個細節可以參考iReport網站的資料,但是可能得花費一些費用。一般用戶沒有必要付出這些費用,因爲我們關心的是如何製作我們需要的報表,而不是去擴展iReport,比如製作iReport的插件。

2、準備

2.1、下載JDK

地址:http://www.sun.com,選擇1.3以上版本(建議1.4.2以上版本),安裝JDK,默認安裝即可;如果你的系統已經有安裝過JDK或是有JRE即可省略這一步驟,驗證JDK或是JRE是否可以默認運行,在命令行(CMD)打入X:>java 如果出現:Usagejava………………………..開頭的一堆信息既是通過驗證。否則必須進行配置,配置信息如下,在windows的環境變量設置:

path:在最後面加入“;java的安裝目錄”

JAVA_HOME :“java的安裝目錄”

CLASSPATH:“java的安裝目錄/bin
重新驗證JDK或是JRE是否可以在CMD任何位置運行

2.2、下載iReport

地址:http://ireport.sourceforge.net/,選擇0.3.2版本(發稿之前爲止建議使用的版本)解壓iReport在任意目錄,解壓後的文件裏面有一個iReport.bat,通過雙擊,過大約30秒鐘如果可以彈出iReport的主窗體即表明你的系統已經可以運行iReport了,如果不能彈出主窗體,一般是第一步驟錯誤,或是沒有完成。

2.3、準備數據庫

iReport支持絕大部分數據庫,只要該數據庫能提供JDBC驅動器。本文提供MySql數據庫作爲例子,但是文章最後會提到如何配置Oracle的支持。關於數據庫的安裝和建立表不屬於本文的範圍,請參考其他資料。本文假設已經安裝了MySql和在MySql已經有一些表,並且確定表中已經有數據了。

*【特別提示】MySql的版本要求與iReport文件夾下的Lib目錄的使用MySql驅動程序兼容,筆者建議到 http://dev.mysql.com/downloads/ 下載最新版本mysql的驅動器,這樣就不會應爲JDBC驅動器的問題而當心數據庫的支持問題。

2.4、啓動MySql服務

確定Mysql使用的的字符集是重要的問題,特別是對需要中文報表的朋友,應該特別注意這個問題。

2.5、確定商務邏輯

       也就是希望完成什麼樣的報表任務。需要實現的報表的詳細描述,這是實現報表的業務條件,否則所有的任務絕大部分沒有意義。本文使用一個Bug記錄表爲例,本文的例子是製作一個根據項目和項目中的模塊分組的Bug量統計。

3、開始配置基本信息

3.1、配置界面使用的語言和報表輸出路徑

       第一次進入系統是英文環境,可以通過【Tools】-【Options】開啓配置iReport系統的基本信息對話框。在“Language”選項裏面選擇你需要的界面語言,比如“中文-中國”。點擊【Apply】按鈕,系統既把整個界面中文化。

       在配置iReport系統的基本信息對話框中選擇【編譯】Label,之後決定你的報表輸出路徑,可以把“編譯在報表數據文件夾”選擇打勾,這樣報表的jrxml文件和jasper文件就放置同一文件夾。(在新建報表時會要求你把jrxml文件保存到指定的文件夾)

Options】選項中的一部分參數修改不能通過【Apply】按鈕直接起作用,比如“Look&Feel”,必須重新啓動iReport才能起作用。不知道是不是iReport的Bug?!最後【存檔】。

3.2、配置MySql的數據庫連接

       這就是報表與數據庫的接口。可以通過【資料來源】-【連接/資料來源】開啓配置列表對話框,iReport會記錄以前使用的所有連接,除非你手工刪除這些連接,否則所有的連接都會存在連接/資料來源配置列表對話框中,不管是否確實可用。

       點擊【New】進入配置新連接界面,如圖:


填寫JDBC連接需要的信息,iReport支持多種數據源連接,如圖:

本文只是介紹DataBase JDBC Connection連接方式,這也是最常用的方式,特別是在嵌入式報表應用。所有的信息填寫並測試通過之後,最後就是保存信息。回到配置列表對話框,關閉對話框,完成MySql數據庫JDBC連接配置。
提示:如果你需要報表提供中文內容顯示可以在JDBC URL下工夫,比如輸入:
jdbc:mysql://localhost/SUBRDB?user=****&password=****&useUnicode=true&characterEncoding=GB2312
其中的****號替換成數據庫的用戶合密碼。

3.3、新建一個空報表的基本配置

單擊工具欄的第一個工具“New Report”,新建一個報表,輸入報表名稱和定義報表的一些參數,比如名稱輸入BugsRpt(例子是做一個項目的Bug量統計報表),單擊【More….】選擇標籤,填寫或是選擇XML編碼,這是關係到你的XML支持的字符集的選擇,請根據需要選擇,比如需要你的XML文件支持中文,那麼可以輸入GB2312或是GBK,之後點擊【OK】按鈕,進入報表的設計界面。

*【特別提示】請在開始任何工作之前保存報表,這時iReport提示保存報表的位置,選擇合適的位置之後輸入BugsRpt作爲名稱。

3.4、定義報表可能需要的字體類型及其屬性

       一 個報表的內容五花八門,有表頭、欄位名、數據、其他變量信息等等,如果這些信息都是一致的字體和屬性(比如顏色),那麼整個報表就死氣沉沉,顯得很粗糙 了。我們可以在爲報表添加每個元素時定義元素的屬性,但是那是一個多麼費時的工作,如果能預先定義一些屬性的組合,之後在創建每個元素時只需選擇這些組合 的其中一個即可,省事又快速。

       單擊【預覽】-【報表字體】開啓自定義組合對話框。單擊【New進入定義詳細對話框,如圖:按照圖中的順序填寫信息和步驟,依次定義“表頭”、“組”、“列”、“列內容”、“統計計算”、“其他”等6中字體組合。注意PDF內嵌字體的選擇,如果你需要報表時以PDF文件格式提供,那麼對此需要作出選擇。


4、理解幾個重要的概念

4.1iReport的輸出格式

iReport的預覽輸出格式可以支持以下幾種:

PDFHTMLCSVJAVA2DExcel、純文字、JRViewer,其中最常用的是PDFJRViewer。本文以JRViewer爲例子。JRViewer是直接以C/S方式作爲報表的輸出格式,在JFrame框架下輸出。Jasperreport提供默認的JRViewer輸出類。

4.2、報表的動態對象變量、參數、字段

在使用iReport的過程中會碰到很多與變量(Variables)、參數(Parameters)、字段(Fields)這些有關的內容,我們要介紹這些對象的使用和意義:

·字段(Fields):是數據庫抽取出來的,希望在報表中出現的數據庫內容。比如一個ID的所有值。$F{ filedsName }

·參數(Parameters):這是你的應用需要提供給報表的入口,比如你希望在報表被解釋的時候提供Where語句的條件值,那麼就可以使用參數(Parameters)。$P{ parameterName }

·變量(Variables):這是報表中一些邏輯運算的表現,比如統計值。$V{ variablesName }

每種對象的定義格式如每個對象的後面說明,比如定義一個變量(Variables),那麼表達式就寫成$V{ variablesName },報表中出現的就是這個變量的名稱。後文會詳細的介紹使用方法。

4.3、編譯、靜態運行、動態運行

Jasperreport運行時需要的就是一個jasper後綴的文件,編譯過程其實就是把jrxml後綴的文件生成jasper後綴的文件。(可以參考Jasperreport的運行原理)

靜態運行和動態運行是相對的,後者帶數據源運行,比如帶數據庫運行。前者就是靜態文本運行,和數據源無關,如果報表中出現和數據源有關的對象,則以null顯示。

4.4、報表結構

       一個報表的結構大致是個部分:titlepageHeadercolumnHeaderdetialcolumnFooterpageFootersummarygroupHeadergroupfooter

·Title:每個報表一般會有一個名字,比如×××銷售報表,title就是擱置這個名稱的最好地方了,當然你也可以根據需要擱置在合適的地方。

·pageHeader:報表的一些公共要素,比如頁碼、創建時間、創建人等信息放置在這裏是比較好的選擇。

·columnHeader:無可非議的這裏是放置列的名稱,記住不是列數據。

·Detial:放置需要循環的數據,比如銷售記錄數據。

·columnFooter:放置列級別的統計計算值或是列的說明。

·pageFooter:放置頁級別的統計值或是頁的說明。

·Summary:可能需要對幾頁(你的報表可能有幾個頁組成)的統計值。比如50個銷售記錄共佔用了3頁,那麼放置這些統計記錄的統計值最好的地方就是summary

·groupHeader:每個表的內容可能需要根據某個屬性進行劃分顯示內容和計算內容,比如希望以月份爲單位每組分開顯示銷售記錄,那麼就可以定義一個組(組的定義參考後文),groupHeader就是放置組說明或是組標誌最好的地方。

·Groupfooter:放置組的統計或是說明

5、向表添加對象

5.1、添加靜態對象

可以通過工具欄的工具添加靜態對象,比如文本,點擊【T】,之後在報表的空白處單擊,如此即可把靜態對象添加到報表,然後拖動對象的邊框,使它的大小合適,雙擊對象彈出對象的屬性配置對話框,切換到【FontLabel,在“Report font”的ComBox選擇“表頭”字體,(表頭字體是前文提供的自定義屬性組合),再切換到【Static TextLabel,修改表頭的名字,比如“Bug統計報表”或是“銷售記錄統計表”等等與業務有關的內容。添加圖片,請點擊【Image Tool】,之後的操作與Text類似。其他靜態對象操作步驟類似。

5.2、使用連接

       還記得前文提供的(3.2節)配置MySql數據庫連接嗎?這裏我們將要使用前文配置的連接了。選擇菜單【建立】-【使用動態連接】開啓可選的動態連接,選擇任何一個你需要的連接最後【OK】,保存報表,這樣你的報表就使用了這個連接了。

*【特別提示】此連接必須與以後應用程序使用的連接一致。

5.3、創建SQL查詢語句

       SQL語句是對任何RDBMS起作用的語言,外部用戶需要使用這些語言管理維護數據庫中的數據,同樣的,iReport也是需要這麼做,我們需要提供查詢數據庫的語言-SQL語句,這樣,iReport即可通過此SQL語句獲取數據,之後組織到報表中並顯示出來,以滿足用戶的需要爲目的。

       通過菜單【資料來源】-【報表查詢】開啓SQL輸入對話框,並在【Report SQL Query Label中輸入SQL語句如圖:圖中的“Automatically Retrieve Fieldscheckbox和“ReadFieldsButton是確認自動獲取還是手動獲取數據庫表的可用Fields。單擊【OK】,保存報表。


5.4、創建字段動態對象

報表的動態對象有變量、參數、字段,前文提及了他們的概念,這裏將要一一講解如何使用。

字段也就是數據庫中的字段,通過菜單【預覽】-【報表字段】開啓字段的列表(工具條上可以找到相應的工具),可以拖放任意字段到報表的任何位置,比如拖動一部分Bug的內容字段到detial段(內容無關緊要,只要知道原理)。

5.5、創建組

組是一個很重要的概念,一個報表可以多個組,每個組以一個關鍵字爲標記,比如希望Bug統計是根據項目(或是產品)進行統計的。那麼可以設立一個項目標記的組。如圖:

組的參數設定可以看界面即可理解部分,其中最主要的是“Group expression”,這是必須輸入格式正確的並且存在的字段名稱,本文的“proname”是【字段】中的一個元素。依此類推,建立其他的組對象。每建立一個組,在報表的界面上都會出現該組對應的段,如圖:至於他們的意義和容納的內容參考“4.4報表結構”,他們是首尾對應出現的。(HeaderFooter

5.6、添加參數和使用參數

我們重申參數作用,一般是需要外界提供參數給報表的入口,比如SQL語句的where條件的表達式。通過【預覽】-【報表參數】開啓報表參數列表對話框(工具條上可以找到相應的工具)。如圖:輸入名稱及其他參數。【ok,保存報表。

那麼如何使用呢?打開SQL語句對話框,參考“5.3創建SQL查詢語句”,這時候的SQL語句應該是:
SELECT *

FROM bugs  where proname=$P{ProjectName} order by proname,modulename
注意其中的紅體字部分,就是把剛纔定義的變量運用到SQL語句了。這樣當應用提供參數時,只要指定提供給這個參數,那麼報表解釋引擎即可替換這些變量然後再執行SQL語句,在第二部分提到編程時,會提供參數設定代碼。

5.7、添加變量和使用變量

變量的定義類似參數,通過【預覽】-【報表變量】開啓報表變量列表對話框(工具條上可以找到相應的工具),如圖,圖中定義的變量的作用是:定義一個Bug的計數器,數據類型是java.lang.Integer,使用Count函數進行統計字段tester,作用範圍是模塊組,也就是統計模塊的Bug量。其中的tester可以改成其他非組對象,比如proname是組對象,就不要用作這裏的統計參數。以上提供的是自定義變量,其實iReport系統還有提供一些內嵌(Buildin)的變量,比如頁碼,行記錄數等,視需要而使用。


6、最後的報表

6.1、完成後的報表

6.2、預覽報表

點擊動態運行報表,出現如圖內容:

7、總結

第一部分只是介紹瞭如何製作一個動態數據報表,其實iReport還有提供很多的特性供開發人員使用,比如柱狀圖、餅圖、及各種形狀的圖形等,滿足企業絕大部分應用的需求。希望你能繼續研究並充分利用。    

    關於使用Oracle數據庫作爲數據源的內容:提供與使用的Oracle版本對應的JDBC驅動,把驅動放置在iReportlib目錄,配置數據庫的JDBC連接時如圖:其它操作基本沒有區別。

8、補充內容

8.1、實現表格

可以在Detial中加入必要線條實現表格,配合columnFooter、columnHeader、Detial這3個位置實現,您可以試試畫線的位置!


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