我的環境是iReport3.0+JDK6.0。
先看看效果。
1)准備數據源,這裡使用XML文件(使用UTF8編碼)作為數據源。
1<?xmlversion="1.0"encoding="utf-8"?>
2<NameList>
3 <Person>
4 <Name>強尼</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,新建一個空的模版文件。
3)加入一個靜態文本(StaticText),右擊屬性(Property),編輯字體屬性和內容。關於Font Name 屬性和PDF Font Name屬性需要PMingLiu字體(將PMingLiu字體放在ireport安裝目錄的font文件夾下)或者你可以選擇其他字體,例如宋體,PDF Font Name 選STSong-Light。
4)接下來就要做表格部分,新建一個子報表(subreport),除了第二步選擇No Connection or datasource,基本上只要點Next就行了。
5)完成上一步後就會跳到子報表NameList_subreport0的視圖,其實子報表也是一個獨立的報表。但是你現在只能看到一個叫Detail的區域(band)。我們還需要更多的區域來結合完成表格的制作。調出區域管理器(菜單View->Bands),將column header 和column footer的高度(height)設為20.
6)在column header加入三個靜態文本(StaticText),字體屬性和之前的一樣,分別加入內容姓名,性別,年齡。在detail區域加入三個文本(textField),在column footer加入一個文本,字體屬性和StaticText保持一樣。然後設置所有靜態文本和文本的邊框,如圖。現在的textField都是沒有數據的,那麼怎麼填充數據呢?現在我們來看怎麼配置數據源和填充數據。
7)菜單data->connections/datasource,新建一個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")。這一步主要是將數據源傳給子報表。
10)打開NameList_subreport0模板,先配置XPATH,然後右擊節點Name,選Add node as field.同樣將Gender和Age節點加入field。點OK。然後你可以看到左邊的結構視窗多了三個Field。
11)編輯Table裡的文本(textfield),右擊選Edit Expression,輸入表達式(Field的表達式,$F{Field_Name})。$V{REPORT_COUNT}是jasperreport內建的變量,用於計算detail區域的行數。
12)保存模板,菜單build->Compile,編譯兩個模板。打開NameList模板,帶數據源運行(build->Execute with active connection)。大功告成。
寫這篇東西花了大半天,有興趣的同志可以下載源代碼看看:http://www.blogjava.net/Files/heis/ireport_table/makeTableUsingIreport.rar