3 iReport
3.1 简介
iReport 就是一个可视化的报表制作工具,代替原来人工书写定义报表的xml,我们可以用iReport做下面的一些工作:
用iReport可以画出我们需要的报表的模版,例如在某个位置显示甚么内容,显示风格的定义等等
定义需要传给jasperReport的参数,例如前面一章将提到的内置参数,也可以自定义需要传递的参数
iReport的提供的功能可以预览报表
将报表模版的xml编译为.jasper文件,供jasperreport调用生成我们需要的报表
除了可以使用前面一章提到的内置变量,我们也可以定义自己的变量
3.2 报表模版布局
3.2.1 区域位置介绍
般情况下规则如下:
title
这个区域的资料整个报表只显示一次
pageHeader
这个区域的资料每一页的顶部显示一次
columnHeader
这个区域的资料每一页的顶部显示一次,位置在pageHeader的后面
detail
这个区域的资料有多少笔记录就显示多少次
columnFooter
这个区域的资料每一页的底部只显示一次,位置在pageFooter,lastPageFooter的前面
pageFooter
这个区域的资料每一页的底部只显示一次,如果有定义lastPageFooter,则最后一页不显示
lastPageFooter
这个区域的资料在报表最后一页的底部只显示一次
summary
这个区域的资料在最后一条记录后面显示,位置在columnFooter, pageFooter,lastPageFooter的前面
3.2.2 如何设置区域
点击工具栏的 ,会弹出下面的窗口,在Band height处输入高度后,点Apply按钮就可以了。
3.3 如何定义Fields,Parameters,Variables
报表的显示数据基本由这三个部分组成。
Fields指的是定义的数据源中对象的属性
Parameters指的是在调用填充报表的对象前,将所需要的参数放到Map对象里
Variables指的是按一定的逻辑通过调用Fields或者Parameters或者Variables组织一个计算表达式
点击工具栏 ,弹出一个对象属性的窗口
Fields
点击新增按钮增加一个field,field包括3个特性:
name:唯一标识
Class type:表示field是哪个类的对象例如:java.lang.Integer等等,不能为基本变量类型如int,double等
Description:field的描述,在特定应用时会用到,例如自己定义的xml数据源,可能需要从不同的Node获取资料,这个时候需要通过description来识别,在后面的具体制作报表的时候可以看到这点。
JasperReport会通过这几个属性产生一个JRField的对象。
在报表模版里书写的标识为$F{field name}
Variables
我们可以看到里面已经有一些变量了,这些就是在JasperReport提到的它的内置变量。
点击新增按钮,弹出的窗口中包括定义Variable name,Variable class type, Calculation type,Variable expression,Initial value expression等等。
Variable name :变量的名字可以和Fields或者Parameters的名字相同,但是不能和其他的变量名字一样
Variable class type:表示变量是哪个类的对象,例如java.lang.Integer等等,不能为基本变量类型如int,double等
Calculation type:常用的包括count,sum, average等等
Variable expression:可以是之前的$F{field name},也可以是自己或者其它的变量
Initial value expression:类型一定要和选择的Variable class type一致
在报表模版里书写的标识为$V{variable name}
Parameters
我们可以看到里面已经有一些参数的定义了,这些就是在JasperReport提到的它的内置参数。
点击新增按钮,弹出的窗口中包括定义Parameter name,Parameter class type, Parameter default value,Parameter description等等
Parameter name:参数名称,其实就是Map的key,所以参数名称不能重复
Parameter class type:表示参数是那个类的对象,即Map中key对应的对象类型
Parameter default value:表示参数为空的时候,赋与的一个值,类型必须和选择的Parameter class type一致
Parameter description:描述栏位,保留栏位
在报表模版里书写的标识为$P{parameter name}
3.4 报表模版主要元件
所有元件在正确的区域内时,当鼠标点击该元件,边框颜色均为蓝色
如果不在正确的区域时,当鼠标点击该元件,边框颜色为红色
如果多个元件重叠,当鼠标点击该元件,边框颜色为绿色
所有元件基本有共同的几个属性,右键点击元件从弹出的菜单中选择properties,弹出一个属性窗口:
Common里面包括:绑定的区域信息,绝对位置和大小,前景色,背景色等等。
Print when expression表示满足甚么条件的时候显示,表达式必须返回一个Boolean的对象
Font里面包括:字体大小,文字位置,文字字体等等,如果是中文或者是亚洲其他语言,当输出为PDF格式时候,需要设定Font是:
Language
PDF Font Name
Simplified Chinese
STSong-Light
Traditional Chinese
MHei-Medium
MSung-Light
Japanese
HeiseiKakuGo-W5
HeiseiMin-W3
Korean
HYGoThic-Medium
HYSMyeongJo-Medium
Border里面包括:边框的线条颜色,粗细,框内文字距离边框的距离等等
3.4.1 直线
点击工具栏 ,可以在报表的任意区域画一条直线
3.4.2 静态的文字
点击工具栏 ,可以在任意区域画一个文本框, 在它的属性窗口输入想要显示的文字
3.4.3 文字字段
点击工具栏 ,可以在任意区域画一个文本框,在属性框输入要显示的Field, Variable,Parameter
Textfield Expression Class:必须和定义的类型一致,目前只支持下面的类型:
java.lang.Boolean
java.lang.Byte
java.util.Date
java.sql.Timestamp
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Short
java.math.BigDecimal
java.lang.String
Evaluation time:赋值时间一般选择now
Stretch with overflow:当文字超出边框时是否自动延长
Banlk when null:当内容为空指针的时候是否显示空格
Pattern:显示的式样,如果为Number类型或者日期类型时可以建立特定的显示式样
Textfield expression:表达式可以为$F{field},$V{variable},$P{parameter}
3.4.4 图象
点击工具栏 ,可以在任意区域插入图象,在属性窗口输入图象的来源
Image Expression:图象来源的表达式,一般情况下选择Image Expression Class为java.lang.String时,表达式为图象的绝对路径,可以通过$F{field},$P{parameter}来传递,也可以通过Find按钮找到本地需要显示的图象路径。
Image Expression Class:图象来源的对象类型,根据不同的类型,Image Expression就要传递该类型的对象
3.4.5 子报表
点击工具栏的 ,可以在detail,summary区域插入子报表,下面是子报表的属性:
窗口1
Paramters Map Expression:这个是传递给子报表的参数表,类型一定是java.util.Map,子报表的参数还可以通过别的方式传递,在下面窗口2中有描述。
Connetion / Datasouce Expression:这个是子报表的数据源,一般情况下是用JRDataSource,这里写的$P{MY_DATA_SOURCE},表示子报表数据源是通过父报表参数传递的,因此要在参数表那里定义。
窗口2
Subreport Expression Class:子报表的类型,通常选择如图中所示的类型,这个参数也是通过父报表的参数来传递,因此要在参数中定义它。
SubReport parameters:子报表的参数,这个地方的参数和窗口1的Paramters Map功能一样,提供参数给子报表,区别是这个地方可以将父报表的一些具体的资料通过map传递给子报表。
3.4.6 图形报表
点击工具栏的 ,可以在任何区域插入它,具体的图形报表制作将在后面的章节详细描述。
3.5 编译报表
当我们画好报表模版后,保存到硬盘上的只是xml 档案,因此需要编译为.jasper的档案,
点击工具栏的 ,如果我们画好的报表没有问题,将产生一个.jasper的档案,如果有错误,将在iReport的下方信息窗口显示出错的信息,为我们纠正错误提供帮助。
4JFreeChart
4.1 简介
主要用来开发各种各样的图形报表,这些图形报表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。在这些不同式样的图形报表上可以满足目前商业系统的要求。JFreeChart是一种基于JAVA 2D的图形报表开发技术。JFreeChart可用于Servlet、JSP、Applet、Java Appication环境中,通过JDBC可动态显示任何数据库数据,结合Itext可以输出至PDF文档。
4.2 几个重要的Class和Interface介绍
Class org.jfree.chart.ChartFactory
这个类负责产生各种图形的org.jfree.chart.JFreeChart的对象,JasperReport通过调用org.jfree.chart.ChartFactory的方法获取到相应图形的org.jfree.chart.JfreeChar的对象。
Class org.jfree.chart.JFreeChart
这个类实现了Java 2D APIs,它的目的是在Java 2D graphics device上绘出想要的图像
Interface org.jfree.data.category.CategoryDataset
用于图形生成所要的数据集对象,实现这个接口的Dataset主要用于3D数据,例如Bar,Group Bar,Line,StackedBar 等等
Interface org.jfree.data.category.PieDataset
用于图形生成所要的数据集对象,实现这个接口的Dataset主要用于2D数据,例如Pie
Interface org.jfree.chart.plot.DrawingSupplier
java.awt.Paint及java.awt.Stroke 对象的提供者,可以通过实现它自己定义Chart的颜色
Abstract Class org.jfree.chart.plot.Plot
这个抽象类以及所有子类做为org.jfree.chart.JFreeChart的代理,在Java 2D graphics device绘出坐标以及数据区域的图像
Abstract Class org.jfree.chart.renderer.AbstractRenderer
这个抽象类以及所有子类主要用在3D数据时在Java 2D graphics device绘出每个区域的颜色,每个区域轮廓的颜色,每个区域上的数值
4.3 JasperReport如何调用JFreeChart产生图形报表
JasperReport在用数据填充报表时,根据图形报表的类型,生成对应的JFreeChart的Dataset对象,再调用org.jfree.chart.ChartFactory产生出对应的org.jfree.chart.JFreeChart对象。获取到该对象后,JasperReport在exporter里建立一个java.awt.image.BufferedImage对象,
BufferedImage返回一个java.awt.Graphics2D对象,再将它传入给之前JFreeChart对象,最后调用JFreeChart对象的draw方法将图形输出到BufferedImage对象,供给Exporter使用。