搜索
您的当前位置:首页iReport使用教程(示例教程)

iReport使用教程(示例教程)

来源:乌哈旅游
iReport使⽤教程(⽰例教程)

在使⽤ireport的过程中,因为各种功能都要百度,但是⼤家使⽤的例⼦⼜千差万别让⼈很苦恼,所以⽤⼀个简单例⼦贯穿的展⽰⼀下ireport的常见功能。

iReport简介

说到iReport不得不先介绍Jasperreport,Jasperreport是⼀个报表制作程序,⽤户需要按照它制定的规则编写 ⼀个XML⽂件,然后得到⽤户需要输出的格式⽂件。它⽀持输出的⽂件格式包括PDF,HTML,XML,XLS,CVS等等。⽽iReport就是⼀个制 作Jasperreport的XML⽂件的可视化开发⼯具。只是⼀个UI。我使⽤的是iReport 3.5.1,使⽤的⽰例数据表如图:

sales表:(⼈名、⼤致结构来⾃帆软电⼦⽂档,如有雷同,⽆意冒犯)

sellers表:

下⾯开始介绍:报表结构

左边是view区,联系着主设计区中的各个band区域的数据,以及参数、变量等。中间是主设计区,通过拖拽控件⾯板可以在此区域进⾏设计,有三种模式:设计(Designer)、源码(Xml)、预览(Preview),设计模式是可视的,源码⽅式可以直接在上修改,预览是对设计好的报表样式进⾏预览,也是⼀个编译的过程;右边是控件⾯板和属性⾯板,可以在此使⽤控件和设置属性。 JasperReport有三个⽅式来保持数据:Field、Paramrter、Variables。

⼀般情况下,Field是⽤作保存从数据源取出来的数据,⽤法是;

Parameter是⽤来占位—我们在设计时往往不知道具体的值,那么⽤⼀个参数来占住它们的位置,在执⾏时,从程序或者数据库中传递对应的参数过来,从⽽实现⼀个动态的过程,⽤法是

Variables是变量,可以将变量⽤于TextFild表达式中,也可以设置它的属性,使它具有⼀些功能,如求和,求平均数等,⽤法是数据源

ireport提供很多种数据源的连接⽅式,

点上⽅的数据库标识就可以设置数据库,下⽅的数据标识⽤来写SQL语句获取数据。

我们这⾥选择jdbc数据连接,mysql连接语句,数据库名称是test

test⼀下是否连通,输⼊数据库密码以后,如果成功会出现提⽰:

⽰例

3.1 简单⽰例

⾸先连接数据库表sales:

点击ok,这时左侧view窗⼝的field区域就得到了取到的数据:

这时,在主设计区域拖拽静态⽂本控件:在column header区域添加列名,然后拖动左侧的field字段到detail域相应的列名下:

3.2 分组⽰例

有时候我们需要分组来观察数据,这时就需要group,我们以区域id来分组,需要注意的是,如果使⽤group分组,需要在⼀开始的sql语句中加上order by语句,否则ireport是不会⾃动分组的。右键添加⼀个分组:

接下来会有⼀个向导,我们根据向导⼀步步操作:

然后下⼀步,完成。

3.3 ⼦表⽅式分组查看

如果不想在sql语句中增加order by语句,那么可以使⽤⼦表的⽅式进⾏分组查看,例如我想在⽗报表master.jasper中查看⼦报表sub_report.jasper的信息,需要⽤到销售情况表sales和员⼯情况表sellers以及⼦报表控件和⼀个参数 area_id。

⾸先建⽴⼦表员⼯信息表sub_report.jasper,新建⼀个参数,作为连接两个表的桥梁:area_id,参数的属性设置如图

主要是要把parameter class设置成与数据库表中同样的类型以防出错。

然后为sub_report绑定数据库表,此时需要注意SQL语句中需要包含我们设定的参数 $P{area_id}

接下来,我们preview⼀下,这时需要给⼀个参数测试,假使我们给定1,结果如图:

这说明分组已经成功,我们下⼀步需要把⼦表与⽗表连接起来。

同样需要新建⼀个报表⽂件master.jasper,为⽅便查看,将区域名称拖⼊detail区域备⽤。

拖拽⼦表控件,根据向导完成⼦表属性设置

(1)选择已有⼦表,注意是选择编译后的⽂件,sub_report.jasper,⽽⾮sub_report.jrxml。如果先建⽗表,在这⾥选择创建⼦表,按照向导创建⼦表,流程如上。

(2)使⽤内建连接参数表达式

(3)设定参数值为本报表中已存在的field域中的$F{area_id}

(4)存储⼦表表达式,事实上,我将⼦表和⽗表已经放在同⼀个⽂件夹中所以不必使⽤绝对路径法,只需存储⼀个路径名称即可

完成,运⾏⼀下:

3.4 图表⽰例 3.4.1 饼图

针对 Pie图表类型,有三个表达式需要我们输⼊:Key,Value 和 Label。表达式 Key 允许你标识 Pie 图⾥的⼀块。如果 Key 的值出现重复, 那么 Label 和 Value的值会关联起来⽤来覆盖 Key 的值。⼀个 Key 值不能为 null。Value 的表达式值指定这个Key 的数字值。Label 表达式的值允许你为并图中每⼀块指定⼀个标签。这个表达式的值是可选的,同时默认值为 key=value ⾸先拖动图表控件,ireport⽀持多种图表,因为⽰例的数据⽐较简单,我们就只说饼图和柱状图。

放好饼图以后,右键chart data,设置图表属性

这⾥需要注意的是,value是⽤来表述你划分饼图关键词的值,本例中,我们根据售货员来销售的苹果汁来划分饼图,那么key就是售货员,他的“值”,也就是苹果销售量就是value,value⼀般要求是数字类型。

如果我们将label表达式换成$F{apple},就会是如下效果:

个⼈认为还是后者⽐较直观。3.4.2 柱状图

过程和饼状图⼀样,效果如下:

显然更复杂的数据⽐较能体现到他的⽤处。

3.5交叉报表

有时候我们不仅需要纵向⽐较数据,也需要同时横向进⾏⽐较,这就⽤到了交叉报表。 交叉报表需要⽤到空间crosstab

我们新建⼀个报表⽂件CrosstabTest,统计⼀下不同区域苹果汁的销售情况,绑好数据表后,拖拽交叉报表控件,根据向导设置: ⾸先选择主报表数据集:

然后,设定⾏参数,我们选择区域id作为分组依据,group2暂时不⽤。

接下来是列参数,选择销售⼈员作为分组依据。

然后是主区数据,我们主要是看不同区域不同销售⼈员苹果汁的销售情况所以选择apple,由于是计数,fuction选择count即可。

最后是布局,crosstab控件会⾃动带⾏总数列总数,可⾃选。

完成:

不在该销售区域的会被标记为0.

此外,iReport还有获取当前时间,获取页数等⼩⼯具可供使⽤,这些⼯具都是基于TextField可以更改表达式进⾏定义。当模板⽂件编译后,可放⾄程序中使⽤,并进⾏参数传递。这是我这⼀段对ireport的摸索,因为数据简单,很多问题还没有发掘出来,有错误和不⾜的地⽅欢迎⼀起讨论改正。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top