用IReport3.7.2开发Web报表(二)——IReport使用

6、手工编写一个例子
6.1、需求
前面我们已经介绍了IReport的开始,现在我们做一个例子。假设我们要做一个会议通讯录的报表,要求按照参会人的单位分组显示,即同一个单位的参会人员显示在一起,而且每个人占用一行,相邻两个人之间用不同的背景进行间隔。要求在标题下面打印会议名称,会议名称通过参数传入。
6.2、绘制
首先你需要获得Javabean中的属性。通过在主界面中选择如下图所示图标,图中用红圈圈住,并用红色箭头指向。
用IReport3.7.2开发Web报表(二)——IReport使用_第1张图片
此时弹出Report Query窗口(如下图所示)。
用IReport3.7.2开发Web报表(二)——IReport使用_第2张图片
选择”JavaBean Datasource“标签,在”Class name“中输入作为数据源的Java类,要求输入完整的类名,要包含包名。因为我建了一个叫做report.CAddressList的Java类(建立方法请看后篇),并且此类里面定义了id、name、nationality、phone、post、sex、unit属性,因此输入完类名后直接点击”Read attributes“按钮就可以获得类里面的这些属性了,选择需要加入报表的字段,然后点击”Add selected field(s)“按钮,将它们加入到窗口最下面列表中,最后选择”OK“按钮,这些Javabean中的属性就加入到”Report Inspector“中的”Fields“节点下,如下图所示:
用IReport3.7.2开发Web报表(二)——IReport使用_第3张图片
要使在”Report Query“窗口中能够读取你自己定义的Javabean的属性,必须将你定义的Javabean放置在IReport的Classpath路径可以寻找的目录中。
下面来讲一下如何让IReport支持自己定义的类。
选择主菜单“工具”下面的“选项”子菜单,如下图所示:
用IReport3.7.2开发Web报表(二)——IReport使用_第4张图片
出现“选项”对话窗口,如下图所示:
用IReport3.7.2开发Web报表(二)——IReport使用_第5张图片
在“选项”窗口中选择“Classpath”标签,将要添加的自己的类所在的目录添加进来即可。然后选择“确定”按钮。
配置好数据源字段后,我们就来开始绘制报表,先要调出组件面板,在组件面板上有很多用来绘制报表的控件,默认情况下组件面板是显示的,如果你的组件面板没有显示,可以通过如下方法调出:
在主菜单”窗口“下选择”组件面板“(如下图所示),或者使用快捷键”ctrl+shift+8“。
用IReport3.7.2开发Web报表(二)——IReport使用_第6张图片
这时在屏幕右边(一般在这边)会出现如下图的面板区域。
用IReport3.7.2开发Web报表(二)——IReport使用_第7张图片
在组件面板中可以选择绘制报表时需要的任何控件,例如线条、矩形框、静态文本标题、图片等等。
下面我们首先绘制一个报表标题,在组件面板中选择”Static Text“,然后拖拽它到报表设计器的Page Header Band,并双击它编辑文字为”会 议 通 讯 录“,每个汉字自己使用空格做了一点间隔,好看而已,不是必须的。这样在报表的每一页都将出现报表名称。如果你只是想在报表第一页显示报表名称,其它页面上不显示,想想看如何处理?对了,将其放置在Title Band中就可以了。
我们将一个控件拖入报表设计器后,就可以在其中拖动位置来布局将来的显示位置,IReport是即看即所得的设计器,因此设计时你如何放置,显示时就是如何显示的。
仅仅将控件拖入报表设计器还不能完全达到我们的目的,我们还需要设置其属性,特别是对于显示的内容是中文的,而且将来要生成PDF文件的,设置相关的属性就更加重要了。我们选中拖入的控件“Static Text”,这是打开其属性面板。属性面板如果没有出现在主窗口中,可以同样在主菜单”窗口“中选择”属性“菜单来打开,属性面板的界面如图:
用IReport3.7.2开发Web报表(二)——IReport使用_第8张图片
这里对于一个”Static Text“控件关键要设置如下几个属性:
1)Font name:在其中选中”宋体“,为了保证报表将来在任何计算机上都可以正常显示,最好使用统一的”宋体“,否则将来客户机器上没有这个特殊字体就会很难看了。
2)Size:设置字体大小。因为此处是报表标题,因此我选用了大字体,选择24。
3)Bold:设置字体为粗体。
4)Pdf Font name is now deprecated:在此选择”STSong-Light“。为了将来导出成PDF可以正常显示汉字。
5)Pdf Embedded:选中它。为了将来导出成PDF可以正常显示汉字。
6)Pdf Encoding:选择”UniGB-UCS2-H (Chinese Simplified)“。为了将来导出成PDF可以正常显示汉字。
7)Horizontal Alignment:选择”Center“。因为我将此"Static Text"的大小拖拽成合页面一样宽。
8)Vertical Aligment:选择”Middle“。
最好效果如下图所示:
用IReport3.7.2开发Web报表(二)——IReport使用_第9张图片
再选择四个”Static Text“控件放置在Page Header Band中,分别设置其文本内容为”会议名称“、”第 “、”页 总“、”页“。并参考上面一样设置相关属性(这里略)。
打开”Report Inspector“面板。如果主窗口中没有此面板,还是到主菜单”窗口“下选择”Report Inspector“菜单即可。“Report Inspector“面板如下图所示:
用IReport3.7.2开发Web报表(二)——IReport使用_第10张图片
在这个面板中会分类列出”Style“、”Parameters“、”Fields“、”Variables“、”Scriptlets“、”Table Dataset“、”Title“、”Page Header“、”Column Header“、”XXX Group Header“(如果建立了分组就会出现它)、”Detail“、”XXXX Group Footer“(如果建立了分组就会出现它)、”Column Footer“、”Page Footer“、”Last Page Footer“、”Summary“、”No Data“、”Background“等节点。
因为按照需要,会议名称是通过参数传入的,因此我们需要在”Parameters“节点下面建立一个名为”meeting_name“的参数。建立方法如下:
1)选中”Parameters“节点,鼠标右键,选择”添加 Parameter“菜单,系统将建立一个”Parameter1“的参数。如下图:
用IReport3.7.2开发Web报表(二)——IReport使用_第11张图片

2)选中”Parameter1“(默认情况下自动选中的),查看其属性面板。修改”name“属性为”meeting_name"。修改“Parameter Class”属性为“java.lang.String”,“Parameter Class”属性就是用来指定参数的数据类型,在IReport中,属性的类型都是Java的类。通过下列选择你需要的类型,也可以点击后面的“...”按钮直接输入java类。可以输入的java类是任意的,可以是Java JDK中包含的任何类,也可以是你定义的类。要使用自己定义的类,就必须将这些类所在的路径配置在Classpath中,配置方法参考前面描述。
现在我们回到“Parameters”的属性面板,在“Default Value Expression”属性中可以填入此参数默认的初始值,因为此参数的数据类型都是Java的类,因此此处要求如下这样写“new java.lang.String("江西省XXX公司年度大会")",就是说要new一个对象出来,不管是String类型还是Interger类型或者其它什么类型。
在”Description“属性中填入的是对参数的描述,如填写成”会议名称“,这样下次看到此参数时就可以指定此参数的用途了。
填写好的”meeting_name“的属性面板如下图所示:
用IReport3.7.2开发Web报表(二)——IReport使用_第12张图片
3)添加页码和总页数。
页码和总页数通过展开”Report Inspector“面板中的“Variables”节点,并从中拖拽就可以了。页码对应的变量是“PAGE_NUMBER”,其”Expression Class“是”java.lang.Integer“,”Evaluation Time“的值是”now“。总页数对应的变量是“PAGE_NUMBER”,其”Expression Class“是”java.lang.Integer“,”Evaluation Time“的值是”report“。“PAGE_NUMBER”是系统默认提供的,不需要我们手工建立。
到此我们的报表头已经绘制结束了,其布局如下图所示:
用IReport3.7.2开发Web报表(二)——IReport使用 - 伏虎 - 追梦人
接下来我们来绘制报表体,因为需求中要求按照参会人所在单位进行分组,将同一单位的参会人放在一起,因此我们先来建立一个分组。建立分组的方法如下:
1)选中”会议通讯录“,鼠标右键,选择”Add Report Group“菜单。如下图所示:
用IReport3.7.2开发Web报表(二)——IReport使用_第13张图片
2)出现”New Group Wizard“向导窗口(如下图所示),在”Group name“中输入一个用于表示本分组的名字,没有限制,我们这里输入”Unit Group“。选择”Group by the following report object“,并在下面的下列选择框中选择”unit“字段。”unit“字段就是Fields中的。
用IReport3.7.2开发Web报表(二)——IReport使用_第14张图片
建立好分组后在”Report Inspector“面板中就会多出”unit group Group Header 1“和”Unit Group Group Footer 1“两个节点。其中”unit group Group Header 1“是分组的头,而”Unit Group Group Footer 1“分组的脚。它们中间就是”Detail Band“。
我们在”unit group Group Header 1“中放入矩形控件,放置方法是从组件面板中选择矩形控件,然后拖入放置在适当的位置。放置矩形控件是为了制做报表的边框、网格等。并放置一些静态文本”Static Text“控件和字段unit。字段unit从”Report Inspector“面板中的Fields中拖入。具体布局界面如下:
用IReport3.7.2开发Web报表(二)——IReport使用 - 伏虎 - 追梦人
还为矩形控件设置了背景颜色。矩形控件设置背景颜色的方法是,选中矩形控件,在其属性面板中修改”Backcolor“属性值。在字段unit外面也放置了一个矩形控件,但没有设置它的背景颜色,因为默认的背景颜色是白色。
另外,为了当数据在换页后不重新显示本表头,因此我们需要做个设置,在”Report Inspector“面板中选中”unit group Group Header 1“,在其属性面板中找到”Reprint Header“,并设置其值为选中,这样当分组数据跨页时,在第二页会重新打印表头。
下面将需要显示的字段如id、name、post、sex、nationality、phone,依次从”Report Inspector“面板中的Fields中拖入并对应放置在相应的表头下面。同时也为每个字段都配置一个矩形用于描绘网格线。其配置效果如下图所示:
用IReport3.7.2开发Web报表(二)——IReport使用 - 伏虎 - 追梦人
其中姓名对应的是$F{name},职务对应的是$F{post},性别对应的是$F{sex},民族对应的是$F{nationality},联系电话对应的是$F{phone},签名下面对应的只有一个矩形框。
序号的设想是每组的序号都会从1开始,因此我通过定义一个变量来实现。选中”Report Inspector“面板中的”Variables“节点,鼠标右键,选择“添加 Variables”菜单,如下图所示:
用IReport3.7.2开发Web报表(二)——IReport使用_第15张图片

系统将在”Variables“节点新增一个“Variable1”,选中它,在属性面板中修改相应属性。
修改Name属性值为“group inner number”;
修改Variable Class属性值为“java.lang.Integer”,此处的内容也必须是Java类,可以是系统的类,也可以是自己定义的类;
修改Calculation属性值为“Nothing”,就是表明此字段不会自己增加。其可选的值有“Count”、“Distinct Count”、“Sum”、“Average”、“Lowest”、“Highest”、”Standard Deviation“、”Variance“、”System“、”First“;其中每种值的含义如下:

含义
Nothing 不做任何计算
Count 对记录集数进行循环累加,计算有多少条记录。
Distinct Count 对记录集数进行循环累加,计算有多少条记录。但忽略重复记录,即某个值已经统计过此处就不再统计
Sum 累加某字段(必须是数字类型)的总和
Average 计算某字段(必须是数字类型)总和的平均值
Lowest 返回某字段的最小值
Highest 返回某字段的最大值
Standard Deviation 返回表达式的所有值的标准方差
Variance 返回表达式收到值的变化
System 不做任何计算也没有任何价值
First


修改Reset type属性值为”Group“。Reset type属性可选的值有如下几种:

说明
none 任何时候不做重置操作
report 在报表创建时才进行变量初始化
page 在报表每页对变量进行初始化
column 在报表处理每个Column时就对变量进行初始化
group 报表每个分组对变量进行初始化

修改Reset Group属性值为”Unit Group"。
修改Increment type属性值为“Group”。其值可选同Reset type属性。
修改Increment Group属性值为“Unit Group”。
修改Variable Expression属性值为“$V{group inner number}。
修改Initial Value Expression属性值为”new Integer(0)"。
最终效果如下图所示:
用IReport3.7.2开发Web报表(二)——IReport使用_第16张图片
接下来来建立一个Scriptlets。选中”Report Inspector“面板中的”Scriptlets“节点,鼠标右键,选择“添加 Scriptlet”菜单,如下图所示:
用IReport3.7.2开发Web报表(二)——IReport使用_第17张图片
系统自动建立“scriptlet1”,通过其属性面板修改相关的属性值。
修改name属性值为“group inner number”。
修改Scriptlet Class属性值为“report.CIntegerIncrement"。report.CIntegerIncrement是我自己定义的一个Java类,具体定义请参考后续文档。
在unit Group Group Footer Band中放入二个静态文本,并从”Report Inspector“面板中的"Variables”节点中拖入一个“Unit Group_Count”的字段。这个字段是建立分组后由系统自动建立的,用于统计各个分组中记录数。其界面布局如下图所示:
用IReport3.7.2开发Web报表(二)——IReport使用 - 伏虎 - 追梦人
到此,报表的设计工作结束,我们来预览一下,点击设计界面中的”Preview“,如图中红色圈中的部分:
用IReport3.7.2开发Web报表(二)——IReport使用_第18张图片
就可以预览报表效果了。
报表设计完毕,通过点击编译图标来生产可分发的jasper文件,其操作如图红色圈中部分:
用IReport3.7.2开发Web报表(二)——IReport使用_第19张图片

下一篇我将继续讲解如何编写程序调用报表。

你可能感兴趣的:(IREPORT)