在網(wǎng)絡(luò)上可以搜索到很多使用
iReport
和
Jasperreport
配合實(shí)現(xiàn)各種報(bào)表任務(wù)的文章,但是我覺得很少有一篇(幾乎沒有)做一個(gè)比較詳細(xì)的介紹如何使用
iReport
制作報(bào)表的全過程,我所看過的文章的基本思想是覆蓋面廣,很多內(nèi)容都是提及即過,并不是開發(fā)人員都有時(shí)間為每個(gè)實(shí)踐花費(fèi)時(shí)間自己實(shí)現(xiàn),如果能有更詳細(xì)的資料,那豈不是一件樂事。出于這個(gè)念頭促使我寫這篇文章,希望能對那些使用
iReport
和
Jasperreport
朋友有所幫助,特別是需要親身去實(shí)現(xiàn)報(bào)表的朋友,希望能給你們帶來一點(diǎn)幫助。本文不是對
iReport
的每個(gè)細(xì)節(jié)進(jìn)行介紹,關(guān)于
iReport
的每個(gè)細(xì)節(jié)可以參考
iReport
網(wǎng)站的資料,但是可能得花費(fèi)一些費(fèi)用。一般用戶沒有必要付出這些費(fèi)用,因?yàn)槲覀冴P(guān)心的是如何制作我們需要的報(bào)表,而不是去擴(kuò)展
iReport
,比如制作
iReport
的插件。
2
、準(zhǔn)備
2.1
、下載
JDK
地址:
http://www.sun.com
,選擇
1.3
以上版本(建議
1.4.2
以上版本),安裝
JDK
,默認(rèn)安裝即可;如果你的系統(tǒng)已經(jīng)有安裝過
JDK
或是有
JRE
即可省略這一步驟,驗(yàn)證
JDK
或是
JRE
是否可以默認(rèn)運(yùn)行,在命令行(
CMD
)打入
X:>java
如果出現(xiàn):
Usage
:
java………………………..
開頭的一堆信息既是通過驗(yàn)證。否則必須進(jìn)行配置,配置信息如下,在
windows
的環(huán)境變量設(shè)置:
path
:在最后面加入“
;java
的安裝目錄”
JAVA_HOME
:“
java
的安裝目錄”
CLASSPATH
:“
java
的安裝目錄
\bin
”
重新驗(yàn)證
JDK
或是
JRE
是否可以在CMD任何位置運(yùn)行
2.2
、下載
iReport
地址:
http://ireport.sourceforge.net/
,選擇
0.3.2
版本(發(fā)稿之前為止建議使用的版本)解壓
iReport
在任意目錄,解壓后的文件里面有一個(gè)
iReport.bat
,通過雙擊,過大約
30
秒鐘如果可以彈出
iReport
的主窗體即表明你的系統(tǒng)已經(jīng)可以運(yùn)行
iReport
了,如果不能彈出主窗體,一般是第一步驟錯(cuò)誤,或是沒有完成。
2.3
、準(zhǔn)備數(shù)據(jù)庫
iReport
支持絕大部分?jǐn)?shù)據(jù)庫,只要該數(shù)據(jù)庫能提供
JDBC
驅(qū)動(dòng)器。本文提供
MySql
數(shù)據(jù)庫作為例子,但是文章最后會(huì)提到如何配置
Oracle
的支持。關(guān)于數(shù)據(jù)庫的安裝和建立表不屬于本文的范圍,請參考其他資料。本文假設(shè)已經(jīng)安裝了
MySql
和在
MySql
已經(jīng)有一些表,并且確定表中已經(jīng)有數(shù)據(jù)了。
*
【特別提示】
MySql
的版本要求與
iReport
文件夾下的
Lib
目錄的使用
MySql
驅(qū)動(dòng)程序兼容,筆者建議到
http://www.mysql.org/
下載最新版本
mysql
的驅(qū)動(dòng)器,這樣就不會(huì)應(yīng)為
JDBC
驅(qū)動(dòng)器的問題而當(dāng)心數(shù)據(jù)庫的支持問題。
2.4
、啟動(dòng)
MySql
服務(wù)
確定
Mysql
使用的的字符集是重要的問題,特別是對需要中文報(bào)表的朋友,應(yīng)該特別注意這個(gè)問題。
2.5
、確定商務(wù)邏輯
??????
也就是希望完成什么樣的報(bào)表任務(wù)。需要實(shí)現(xiàn)的報(bào)表的詳細(xì)描述,這是實(shí)現(xiàn)報(bào)表的業(yè)務(wù)條件,否則所有的任務(wù)絕大部分沒有意義。本文使用一個(gè)
Bug
記錄表為例,本文的例子是制作一個(gè)根據(jù)項(xiàng)目和項(xiàng)目中的模塊分組的
Bug
量統(tǒng)計(jì)。
3
、開始配置基本信息
3.1
、配置界面使用的語言和報(bào)表輸出路徑
??????
第一次進(jìn)入系統(tǒng)是英文環(huán)境,可以通過【
Tools
】-【
Options
】開啟配置iReport系統(tǒng)的基本信息對話框。在“
Language
”選項(xiàng)里面選擇你需要的界面語言,比如“中文-中國”。點(diǎn)擊【
Apply
】按鈕,系統(tǒng)既把整個(gè)界面中文化。
??????
在配置iReport系統(tǒng)的基本信息對話框中選擇【編譯】
Label
,之后決定你的報(bào)表輸出路徑,可以把“編譯在報(bào)表數(shù)據(jù)文件夾”選擇打勾,這樣報(bào)表的
jrxml
文件和
jasper
文件就放置同一文件夾。(在新建報(bào)表時(shí)會(huì)要求你把
jrxml
文件保存到指定的文件夾)
【
Options
】選項(xiàng)中的一部分參數(shù)修改不能通過【
Apply
】按鈕直接起作用,比如“
Look&Feel
”,必須重新啟動(dòng)
iReport
才能起作用。不知道是不是iReport的
Bug
?!最后【存檔】。
3.2
、配置
MySql
的數(shù)據(jù)庫連接
??????
這就是報(bào)表與數(shù)據(jù)庫的接口。可以通過【資料來源】-【連接
/
資料來源】開啟配置列表對話框,
iReport
會(huì)記錄以前使用的所有連接,除非你手工刪除這些連接,否則所有的連接都會(huì)存在連接
/
資料來源配置列表對話框中,不管是否確實(shí)可用。
??????
點(diǎn)擊【
New
】進(jìn)入配置新連接界面,如圖:
填寫JDBC連接需要的信息,iReport支持多種數(shù)據(jù)源連接,如圖:
習(xí)/BlogJava%20-%20阿木隨筆%20-%20使用iReport制作報(bào)表的詳細(xì)過程.files/o_2.jpg)
3.3
、新建一個(gè)空報(bào)表的基本配置
單擊工具欄的第一個(gè)工具“
New Report
”,新建一個(gè)報(bào)表,輸入報(bào)表名稱和定義報(bào)表的一些參數(shù),比如名稱輸入
BugsRpt
(例子是做一個(gè)項(xiàng)目的
Bug
量統(tǒng)計(jì)報(bào)表)
,
單擊【
More….
】選擇標(biāo)簽,填寫或是選擇
XML
編碼,這是關(guān)系到你的
XML
支持的字符集的選擇,請根據(jù)需要選擇,比如需要你的
XML
文件支持中文,那么可以輸入
GB2312
或是
GBK
,之后點(diǎn)擊【
OK
】按鈕,進(jìn)入報(bào)表的設(shè)計(jì)界面。
*
【特別提示】請?jiān)陂_始任何工作之前保存報(bào)表,這時(shí)
iReport
提示保存報(bào)表的位置,選擇合適的位置之后輸入
BugsRpt
作為名稱。
3.4
、定義報(bào)表可能需要的字體類型及其屬性
??????
一個(gè)報(bào)表的內(nèi)容五花八門,有表頭、欄位名、數(shù)據(jù)、其他變量信息等等,如果這些信息都是一致的字體和屬性(比如顏色),那么整個(gè)報(bào)表就死氣沉沉,顯得很粗糙了。我們可以在為報(bào)表添加每個(gè)元素時(shí)定義元素的屬性,但是那是一個(gè)多么費(fèi)時(shí)的工作,如果能預(yù)先定義一些屬性的組合,之后在創(chuàng)建每個(gè)元素時(shí)只需選擇這些組合的其中一個(gè)即可,省事又快速。
??????
單擊【預(yù)覽】-【報(bào)表字體】開啟自定義組合對話框。單擊【
New
】
進(jìn)入定義詳細(xì)對話框,如圖:按照圖中的順序填寫信息和步驟,依次定義“表頭”、“組”、“列”、“列內(nèi)容”、“統(tǒng)計(jì)計(jì)算”、“其他”等6中字體組合。注意PDF內(nèi)嵌字體的選擇,如果你需要報(bào)表時(shí)以PDF文件格式提供,那么對此需要作出選擇。
4
、理解幾個(gè)重要的概念
4.1
、
iReport
的輸出格式
iReport
的預(yù)覽輸出格式可以支持以下幾種:
PDF
、
HTML
、
CSV
、
JAVA2D
、
Excel
、純文字、
JRViewer
,其中最常用的是
PDF
、
JRViewer
。本文以
JRViewer
為例子。
JRViewer
是直接以
C/S
方式作為報(bào)表的輸出格式,在
JFrame
框架下輸出。
Jasperreport
提供默認(rèn)的
JRViewer
輸出類。
4.2
、報(bào)表的動(dòng)態(tài)對象變量、參數(shù)、字段
在使用
iReport
的過程中會(huì)碰到很多與變量(
Variables
)、參數(shù)(
Parameters
)、字段(
Fields
)這些有關(guān)的內(nèi)容,我們要介紹這些對象的使用和意義:
·字段(
Fields
):是數(shù)據(jù)庫抽取出來的,希望在報(bào)表中出現(xiàn)的數(shù)據(jù)庫內(nèi)容。比如一個(gè)
ID
的所有值。
$F{ filedsName }
·參數(shù)(
Parameters
):這是你的應(yīng)用需要提供給報(bào)表的入口,比如你希望在報(bào)表被解釋的時(shí)候提供
Where
語句的條件值,那么就可以使用參數(shù)(
Parameters
)。
$P{ parameterName }
·變量(
Variables
):這是報(bào)表中一些邏輯運(yùn)算的表現(xiàn),比如統(tǒng)計(jì)值。
$V{ variablesName }
每種對象的定義格式如每個(gè)對象的后面說明,比如定義一個(gè)變量(
Variables
),那么表達(dá)式就寫成
$V{ variablesName }
,報(bào)表中出現(xiàn)的就是這個(gè)變量的名稱。后文會(huì)詳細(xì)的介紹使用方法。
4.3
、編譯、靜態(tài)運(yùn)行、動(dòng)態(tài)運(yùn)行
Jasperreport
運(yùn)行時(shí)需要的就是一個(gè)
jasper
后綴的文件,編譯過程其實(shí)就是把
jrxml
后綴的文件生成
jasper
后綴的文件。(可以參考
Jasperreport
的運(yùn)行原理)
靜態(tài)運(yùn)行和動(dòng)態(tài)運(yùn)行是相對的,后者帶數(shù)據(jù)源運(yùn)行,比如帶數(shù)據(jù)庫運(yùn)行。前者就是靜態(tài)文本運(yùn)行,和數(shù)據(jù)源無關(guān),如果報(bào)表中出現(xiàn)和數(shù)據(jù)源有關(guān)的對象,則以
null
顯示。
4.4
、報(bào)表結(jié)構(gòu)
??????
一個(gè)報(bào)表的結(jié)構(gòu)大致是
幾
個(gè)部分:
title
、
pageHeader
、
columnHeader
、
detial
、
columnFooter
、
pageFooter
、
summary
、
groupHeader
、
groupfooter
。
·Title
:每個(gè)報(bào)表一般會(huì)有一個(gè)名字,比如×××銷售報(bào)表,
title
就是擱置這個(gè)名稱的最好地方了,當(dāng)然你也可以根據(jù)需要擱置在合適的地方。
·pageHeader
:報(bào)表的一些公共要素,比如頁碼、創(chuàng)建時(shí)間、創(chuàng)建人等信息放置在這里是比較好的選擇。
·columnHeader
:無可非議的這里是放置列的名稱,記住不是列數(shù)據(jù)。
·Detial
:放置需要循環(huán)的數(shù)據(jù),比如銷售記錄數(shù)據(jù)。
·columnFooter
:放置列級(jí)別的統(tǒng)計(jì)計(jì)算值或是列的說明。
·pageFooter
:放置頁級(jí)別的統(tǒng)計(jì)值或是頁的說明。
·Summary
:可能需要對幾頁(你的報(bào)表可能有幾個(gè)頁組成)的統(tǒng)計(jì)值。比如
50
個(gè)銷售記錄共占用了
3
頁,那么放置這些統(tǒng)計(jì)記錄的統(tǒng)計(jì)值最好的地方就是
summary
。
·groupHeader
:每個(gè)表的內(nèi)容可能需要根據(jù)某個(gè)屬性進(jìn)行劃分顯示內(nèi)容和計(jì)算內(nèi)容,比如希望以月份為單位每組分開顯示銷售記錄,那么就可以定義一個(gè)組(組的定義參考后文),
groupHeader
就是放置組說明或是組標(biāo)志最好的地方。
·Groupfooter
:放置組的統(tǒng)計(jì)或是說明
5
、向表添加對象
5.1
、添加靜態(tài)對象
可以通過工具欄的工具添加靜態(tài)對象,比如文本,點(diǎn)擊【
T
】,之后在報(bào)表的空白處單擊,如此即可把靜態(tài)對象添加到報(bào)表,然后拖動(dòng)對象的邊框,使它的大小合適,雙擊對象彈出對象的屬性配置對話框,切換到【
Font
】
Label
,在“
Report font
”的
ComBox
選擇“表頭”字體,(表頭字體是前文提供的自定義屬性組合),再切換到【
Static Text
】
Label
,修改表頭的名字,比如“
Bug
統(tǒng)計(jì)報(bào)表”或是“銷售記錄統(tǒng)計(jì)表”等等與業(yè)務(wù)有關(guān)的內(nèi)容。添加圖片,請點(diǎn)擊【
Image Tool
】,之后的操作與
Text
類似。其他靜態(tài)對象操作步驟類似。
5.2
、使用連接
??????
還記得前文提供的(
3.2
節(jié))配置
MySql
數(shù)據(jù)庫連接嗎?這里我們將要使用前文配置的連接了。選擇菜單【建立】-【使用動(dòng)態(tài)連接】開啟可選的動(dòng)態(tài)連接,選擇任何一個(gè)你需要的連接最后【
OK
】,保存報(bào)表,這樣你的報(bào)表就使用了這個(gè)連接了。
*
【特別提示】此連接必須與以后應(yīng)用程序使用的連接一致。
5.3
、創(chuàng)建
SQL
查詢語句
?????? SQL
語句是對任何
RDBMS
起作用的語言,外部用戶需要使用這些語言管理維護(hù)數(shù)據(jù)庫中的數(shù)據(jù),同樣的,
iReport
也是需要這么做,我們需要提供查詢數(shù)據(jù)庫的語言-
SQL
語句,這樣,
iReport
即可通過此
SQL
語句獲取數(shù)據(jù),之后組織到報(bào)表中并顯示出來,以滿足用戶的需要為目的。
??????
通過菜單【資料來源】-【報(bào)表查詢】開啟
SQL
輸入對話框,并在【
Report SQL Query
】
Label
中輸入
SQL
語句如圖:圖中的“
Automatically Retrieve Fields
”
checkbox
和“
ReadFields
”
Button
是確認(rèn)自動(dòng)獲取還是手動(dòng)獲取數(shù)據(jù)庫表的可用
Fields
。單擊【
OK
】,保存報(bào)表。
5.4
、創(chuàng)建字段動(dòng)態(tài)對象
報(bào)表的動(dòng)態(tài)對象有變量、參數(shù)、字段,前文提及了他們的概念,這里將要一一講解如何使用。
字段也就是數(shù)據(jù)庫中的字段,通過菜單【預(yù)覽】-【報(bào)表字段】開啟字段的列表(工具條上可以找到相應(yīng)的工具),可以拖放任意字段到報(bào)表的任何位置,比如拖動(dòng)一部分
Bug
的內(nèi)容字段到
detial
段(內(nèi)容無關(guān)緊要,只要知道原理)。
5.5
、創(chuàng)建組
組是一個(gè)很重要的概念,一個(gè)報(bào)表可以多個(gè)組,每個(gè)組以一個(gè)關(guān)鍵字為標(biāo)記,比如希望
Bug
統(tǒng)計(jì)是根據(jù)項(xiàng)目(或是產(chǎn)品)進(jìn)行統(tǒng)計(jì)的。那么可以設(shè)立一個(gè)項(xiàng)目標(biāo)記的組。如圖:
習(xí)/BlogJava%20-%20阿木隨筆%20-%20使用iReport制作報(bào)表的詳細(xì)過程.files/o_5.jpg)
組的參數(shù)設(shè)定可以看界面即可理解部分,其中最主要的是“Group expression”,這是必須輸入格式正確的并且存在的字段名稱,本文的“proname”是【字段】中的一個(gè)元素。依此類推,建立其他的組對象。每建立一個(gè)組,在報(bào)表的界面上都會(huì)出現(xiàn)該組對應(yīng)的段,如圖:至于他們的意義和容納的內(nèi)容參考“4.4報(bào)表結(jié)構(gòu)”,他們是首尾對應(yīng)出現(xiàn)的。(Header和Footer)
習(xí)/BlogJava%20-%20阿木隨筆%20-%20使用iReport制作報(bào)表的詳細(xì)過程.files/o_6.jpg)
5.6
、添加參數(shù)和使用參數(shù)
我們重申參數(shù)作用,一般是需要外界提供參數(shù)給報(bào)表的入口,比如
SQL
語句的
where
條件的表達(dá)式。通過【預(yù)覽】-【報(bào)表參數(shù)】開啟報(bào)表參數(shù)列表對話框(工具條上可以找到相應(yīng)的工具)。如圖:輸入名稱及其他參數(shù)。【
ok
】
,
保存報(bào)表。
習(xí)/BlogJava%20-%20阿木隨筆%20-%20使用iReport制作報(bào)表的詳細(xì)過程.files/o_7.jpg)
那么如何使用呢?打開
SQL
語句對話框,參考“
5.3
創(chuàng)建
SQL
查詢語句”,這時(shí)候的
SQL
語句應(yīng)該是:
SELECT *
FROM bugs? where proname=$P{ProjectName} order by proname,modulename
注意其中的紅體字部分,就是把剛才定義的變量運(yùn)用到SQL語句了。這樣當(dāng)應(yīng)用提供參數(shù)時(shí),只要指定提供給這個(gè)參數(shù),那么報(bào)表解釋引擎即可替換這些變量然后再執(zhí)行SQL語句,在第二部分提到編程時(shí),會(huì)提供參數(shù)設(shè)定代碼。
5.7
、添加變量和使用變量
變量的定義類似參數(shù),通過【預(yù)覽】-【報(bào)表變量】開啟報(bào)表變量列表對話框(工具條上可以找到相應(yīng)的工具),如圖,圖中定義的變量的作用是:定義一個(gè)
Bug
的計(jì)數(shù)器,數(shù)據(jù)類型是
java.lang.Integer,
使用
Count
函數(shù)進(jìn)行統(tǒng)計(jì)字段
tester
,作用范圍是模塊組,也就是統(tǒng)計(jì)模塊的
Bug
量。其中的
tester
可以改成其他非組對象,比如
proname
是組對象,就不要用作這里的統(tǒng)計(jì)參數(shù)。以上提供的是自定義變量,其實(shí)iReport系統(tǒng)還有提供一些內(nèi)嵌(
Buildin
)的變量,比如頁碼,行記錄數(shù)等,視需要而使用。
6
、最后的報(bào)表
6.1
、完成后的報(bào)表
6.2
、預(yù)覽報(bào)表
?
點(diǎn)擊動(dòng)態(tài)運(yùn)行報(bào)表,出現(xiàn)如圖內(nèi)容:
7
、總結(jié)
第一部分只是介紹了如何制作一個(gè)動(dòng)態(tài)數(shù)據(jù)報(bào)表,其實(shí)
iReport
還有提供很多的特性供開發(fā)人員使用,比如柱狀圖、餅圖、及各種形狀的圖形等,滿足企業(yè)絕大部分應(yīng)用的需求。希望你能繼續(xù)研究并充分利用。
????
????關(guān)于使用
Oracle
數(shù)據(jù)庫作為數(shù)據(jù)源的內(nèi)容:提供與使用的
Oracle
版本對應(yīng)的
JDBC
驅(qū)動(dòng),把驅(qū)動(dòng)放置在
iReport
的
lib
目錄,配置數(shù)據(jù)庫的
JDBC
連接時(shí)如圖:其它操作基本沒有區(qū)別。
8、補(bǔ)充內(nèi)容
8.1、實(shí)現(xiàn)表格
可以在Detial中加入必要線條實(shí)現(xiàn)表格,配合columnFooter、columnHeader、Detial這3個(gè)位置實(shí)現(xiàn),您可以試試畫線的位置!
轉(zhuǎn)自-阿木Blog