標籤:c style class blog code java
提示:在有些板塊,文中的圖片看不到,建議到我的blog瀏覽文章:http://blog.csdn.net/jemlee2002/
文章將會涉及3個方面的內容:
第一部分:使用iReport製作報表的詳細過程(Windows環境下)
第二部分:使用Jasperreport作為報表控制項開發胖用戶端報表應用
第三部分:使用Jasperreport作為報表控制項開發Web報表應用
1、前言
在網路上可以搜尋到很多使用iReport和Jasperreport配合實現各種報表任務的文章,但是我覺得很少有一篇(幾乎沒有)做一個比較詳細的介紹如何使用iReport製作報表的全過程,我所看過的文章的基本思想是覆蓋面廣,很多內容都是提及即過,並不是開發人員都有時間為每個實踐花費時間自己實現,如果能有更詳細的資料,那豈不是一件樂事。出於這個念頭促使我寫這篇文章,希望能對那些使用iReport和Jasperreport朋友有所協助,特別是需要親身去實現報表的朋友,希望能給你們帶來一點協助。本文不是對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 如果出現:Usage:java………………………..開頭的一堆資訊既是通過驗證。否則必須進行配置,配置資訊如下,在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.1、iReport的輸出格式
iReport的預覽輸出格式可以支援以下幾種:
PDF、HTML、CSV、JAVA2D、Excel、純文字、JRViewer,其中最常用的是PDF、JRViewer。本文以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、報表結構
一個報表的結構大致是幾個部分:title、pageHeader、columnHeader、detial、columnFooter、pageFooter、summary、groupHeader、groupfooter。
·Title:每個報表一般會有一個名字,比如×××銷售報告,title就是擱置這個名稱的最好地方了,當然你也可以根據需要擱置在合適的地方。
·pageHeader:報表的一些公用要素,比如頁碼、建立時間、建立人等資訊放置在這裡是比較好的選擇。
·columnHeader:無可非議的這裡是放置列的名稱,記住不是列資料。
·Detial:放置需要迴圈的資料,比如銷售記錄資料。
·columnFooter:放置列層級的統計計算值或是列的說明。
·pageFooter:放置頁層級的統計值或是頁的說明。
·Summary:可能需要對幾頁(你的報表可能有幾個頁組成)的統計值。比如50個銷售記錄共佔用了3頁,那麼放置這些統計記錄的統計值最好的地方就是summary。
·groupHeader:每個表的內容可能需要根據某個屬性進行劃分顯示內容和計算內容,比如希望以月份為單位每組分開顯示銷售記錄,那麼就可以定義一個組(組的定義參考後文),groupHeader就是放置組說明或是組標誌最好的地方。
·Groupfooter:放置組的統計或是說明
5、向表添加對象5.1、添加靜態對象
可以通過工具列的工具添加靜態對象,比如文本,點擊【T】,之後在報表的空白處單擊,如此即可把靜態對象添加到報表,然後拖動對象的邊框,使它的大小合適,雙擊對象彈出對象的屬性配置對話方塊,切換到【Font】Label,在“Report font”的ComBox選擇“表頭”字型,(表頭字型是前文提供的自訂屬性組合),再切換到【Static Text】Label,修改表頭的名字,比如“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 Fields”checkbox和“ReadFields”Button是確認自動擷取還是手動擷取資料庫表的可用Fields。單擊【OK】,儲存報表。
5.4、建立欄位動態對象
報表的動態對象有變數、參數、欄位,前文提及了他們的概念,這裡將要一一講解如何使用。
欄位也就是資料庫中的欄位,通過菜單【預覽】-【報表欄位】開啟欄位的列表(工具條上可以找到相應的工具),可以拖放任意欄位到報表的任何位置,比如拖動一部分Bug的內容欄位到detial段(內容無關緊要,只要知道原理)。
5.5、建立組
組是一個很重要的概念,一個報表可以多個組,每個組以一個關鍵字為標記,比如希望Bug統計是根據項目(或是產品)進行統計的。那麼可以設立一個項目標記的組。
組的參數設定可以看介面即可理解部分,其中最主要的是“Group expression”,這是必須輸入格式正確的並且存在的欄位名稱,本文的“proname”是【欄位】中的一個元素。依此類推,建立其他的組對象。每建立一個組,在報表的介面上都會出現該組對應的段,至於他們的意義和容納的內容參考“4.4報表結構”,他們是首尾對應出現的。(Header和Footer)
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驅動,把驅動放置在iReport的lib目錄,設定資料庫的JDBC串連時其它操作基本沒有區別。
8、補充內容8.1、實現表格
可以在Detial中加入必要線條實現表格,配合columnFooter、columnHeader、Detial這3個位置實現,您可以試試畫線的位置!