JasperReport那些事儿(一)——iReport建造表格
副标题#e#
我的情况是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就行了。
#p#副标题#e#
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