如果你還不知道jasperreport和ireport,那你可以參考我的上一篇文章,或者谷歌百度一下。好了,廢話少說(shuō),Let’s start,Go!
我的環(huán)境是iReport3.0+JDK6.0。
先看看效果。

1) 準(zhǔn)備數(shù)據(jù)源,這里使用XML文件(使用UTF8編碼)作為數(shù)據(jù)源。
1 <?xml version="1.0" encoding="utf-8" ?>
2 <NameList>
3 <Person>
4 <Name>強(qiáng)尼</Name>
5 <Gender>男</Gender>
6 <Age>56</Age>
7 </Person>
8 <Person>
9 <Name>阿美</Name>
10 <Gender>女</Gender>
11 <Age>23</Age>
12 </Person>
13 <Person>
14 <Name>李麗</Name>
15 <Gender>女</Gender>
16 <Age>58</Age>
17 </Person>
18 <Person>
19 <Name>杰森</Name>
20 <Gender>男</Gender>
21 <Age>32</Age>
22 </Person>
23 <Person>
24 <Name>劉三</Name>
25 <Gender>男</Gender>
26 <Age>21</Age>
27 </Person>
28 </NameList>
2) 打開iReport,新建一個(gè)空的模版文件。
3) 加入一個(gè)靜態(tài)文本(StaticText),右擊屬性(Property),編輯字體屬性和內(nèi)容。關(guān)于Font Name 屬性和PDF Font Name屬性需要PMingLiu字體(下載)(將PMingLiu字體放在ireport安裝目錄的font文件夾下)或者你可以選擇其他字體,例如宋體,PDF Font Name 選STSong-Light
。
4) 接下來(lái)就要做表格部分,新建一個(gè)子報(bào)表(subreport),除了第二步選擇No Connection or datasource,基本上只要點(diǎn)Next就行了。
5) 完成上一步后就會(huì)跳到子報(bào)表NameList_subreport0的視圖,其實(shí)子報(bào)表也是一個(gè)獨(dú)立的報(bào)表。但是你現(xiàn)在只能看到一個(gè)叫Detail的區(qū)域(band)。我們還需要更多的區(qū)域來(lái)結(jié)合完成表格的制作。調(diào)出區(qū)域管理器(菜單View->Bands),將column header 和column footer的高度(height)設(shè)為20.
6) 在column header加入三個(gè)靜態(tài)文本(StaticText),字體屬性和之前的一樣,分別加入內(nèi)容姓名,性別,年齡。在detail區(qū)域加入三個(gè)文本(textField),在column footer加入一個(gè)文本,字體屬性和StaticText保持一樣。然后設(shè)置所有靜態(tài)文本和文本的邊框,如圖。現(xiàn)在的textField都是沒有數(shù)據(jù)的,那么怎么填充數(shù)據(jù)呢?現(xiàn)在我們來(lái)看怎么配置數(shù)據(jù)源和填充數(shù)據(jù)。
7) 菜單data->connections/datasource,新建一個(gè)XML datasouce,目錄位置指向之前建立的XML文件。選擇Use the report Xpath xpression when filling the report.
8) 打開NameList模版,菜單data->report query,配置XPATH如圖。
9) 配置NameList模板的subreport, 編輯屬性Connection/Data Source Expression,輸入 ((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("/NameList /Person")。這一步主要是將數(shù)據(jù)源傳給子報(bào)表。

10) 打開NameList_subreport0模板,先配置XPATH,然后右擊節(jié)點(diǎn)Name,選Add node as field.同樣將Gender和Age節(jié)點(diǎn)加入field。點(diǎn)OK。然后你可以看到左邊的結(jié)構(gòu)視窗多了三個(gè)Field。
11) 編輯Table里的文本(textfield),右擊選Edit Expression,輸入表達(dá)式(Field的表達(dá)式,$F{Field_Name})。$V{REPORT_COUNT}是jasperreport 內(nèi)建的變量,用于計(jì)算detail區(qū)域的行數(shù)。
12) 保存模板,菜單build->Compile,編譯兩個(gè)模板。打開NameList模板,帶數(shù)據(jù)源運(yùn)行(build->Execute with active connection)。大功告成。
寫這篇東西花了大半天,有興趣的同志可以下載源代碼看看。點(diǎn)擊下載
程序員的一生其實(shí)可短暫了,這電腦一開一關(guān),一天過(guò)去了,嚎;電腦一開不關(guān),那就成服務(wù)器了,嚎……