一、iReport与JasperReport简介
1.1 简介
JasperReport是报表的引擎部分,界面设计是用iReport。为什么选择这两个软件呢?因为这两个软件都是开源的,即免费的(虽然某些文档收费,但是磨灭不了我们使用它的理由)。
JasperReport是一个报表制作程序,用户按照它制定的规则编写一个XML文件,然后得到用户需要输出的格式文件。它支持输出的文件格式包括PDF,HTML,XML,XLS,CSV等等。
用JasperReport做报表,可以分为两种方式:
1、 直接利用程序定义一个报表
2、 写一个xml文件来描述这个报表,通常需要借助于iReport
JasperReport做报表时用的都是底层的东西,如线条、静态文本等,底层的好处就是强大、容易控制报表,但缺点就是编写很麻烦。庆幸的是,我们有iReport这个软件,这个软件完全是弥补JasperReport的不足,将底层编写推向可视化,大大的方便了我们。
1.2 工作流程简介
JasperReport的工作流程:首先有个xml文件,从xml文件编译出.jasper类型的文件,而以后我们真正要使用的就是编译后的jasper文件。
上图为JasperReport的API示意图,可作为学习的参考。由iReport输出的文件中,对WEB应用可能有用的是jasper文件,当JAVA程序进行调用的时候,将把jasper文件转换成print类型,从而进一步到达其他格式的输出(如上图)。
二、安装与配置
2.1下载相关软件
对于较古老的版本,这里不做过多介绍,请参考本目录下其他文献。这里提一下,古老版本需要额外下载ANT(JAVA的build工具)以及iTextAsian.jar(用以支持中文的jar包)等。
iReport http://www.jasperforge.org/jaspersoft/opensource/business_intelligence/ireport/ 下载
JasperReport http://www.jasperforge.org/jaspersoft/opensource/business_intelligence/jasperreports/ 下载
JDK http://java.sun.com/ 下载
本人用的产品版本:iReport 2.0.5-windows版本;JasperReport 2.0.5版本;JDK 1.5.0_4版本。
注:在新的iReport版本中,已经包含了JasperReport的jar包,不需要下载JasperReport包了,但是,要更多的了解JasperReport,还是推荐下载完整的软件包,以学习它的源代码和例子。还有,新版本的iReport带有字体包,不需另下。
2.2 安装软件
首先安装JDK,一路NEXT即可。
其次,安装iReport,由于新版本对windows支持较好,所以和JDK一样,一路NEXT即可。
注:旧版本需要对环境变量进行配置,此篇文章介绍的版本以及更新的版本均不需要手动配置环境变量。
2.3 其他相关
您还需要准备一个数据源(如果需要做动态报表的话),大部分情况是一个数据库。笔者使用的是Oracle 9i的数据库。
三、iReport的基本使用
先看使用界面:
下面开始初步尝试。
1. 新建报表
弹出对话框如下:
还有许多其他的选项,中文可以理解。有个XML编码,可以手动输入,也可保持默认,点击”OK”创建新表完成。
注:iReport不会自动保存,需要手动保存,建议多保存。
2. 报表的结构
新建的报表如下:
一个报表的结构大致是几个部分:title、pageHeader、columnHeader、detail、columnFooter、pageFooter、lastPageFooter、summary以及groupHeader、groupfooter。
·Title:每个报表一般会有一个名字,比如×××销售报表,title就是搁置这个名称的最好地方了,当然你也可以根据需要搁置在合适的地方。Title只在第一页出现。
·pageHeader:报表的一些公共要素,比如页码、创建时间、创建人等信息放置在这里是比较好的选择。
·columnHeader:无可非议的这里是放置列的名称,记住不是列数据。
·detial:放置需要循环输出的数据,比如销售记录数据。
·columnFooter:放置列级别的统计计算值或是列的说明。
·pageFooter:放置页级别的统计值或是页的说明。
·lastPageFooter:最后一页特殊的格式,可以放置总结等。
·Summary:可能需要对几页(你的报表可能有几个页组成)的统计值。比如50个销售记录共占用了3页,那么放置这些统计记录的统计值最好的地方就是summary。Summary只在最后一页出现。
·groupHeader:每个表的内容可能需要根据某个属性进行划分显示内容和计算内容,比如希望以月份为单位每组分开显示销售记录,那么就可以定义一个组(组的定义参考后文),groupHeader就是放置组说明或是组标志最好的地方。
·Groupfooter:放置组的统计或是说明
3. 添加对象
可以通过工具栏的工具添加静态对象与动态对象。点击 可以创建静态对象,点击 可以创建动态对象。之后在报表的空白处单击,如此即可把对象添加到报表,然后拖动对象的边框,使它的大小合适,双击即可对对象中的文本进行快速编辑。
仔细观察,会发现对象的边框有两种颜色,一为蓝色,二为红色,蓝色为符合布局要求,红色反之。
注:一个对象不能横跨两个区域,即不能既在columnHeader里又在detail里。
鼠标右击对象,弹出如下菜单:
点击”属性”,编辑对象的属性。
这里面有很多属性,可以依据要求来更改其中的部分或所有。其中,重要的可能是关于PDF的,如下图。
红框框起来的部分要注意,当要输出中文的时候,需要类似设置。新版本对边框的更新,使我们操作起来更为方便。注意下面红框里的部分,这可以对每一个边进行分开的设置,人性化的为我们解决了大量问题。
注:JasperReport没有现成的表格,最好的方法就是用一个一个对象的边框堆积起来,组成一个表格。但是,对象的边框不能覆盖,否则HTML、EXCEL等不能正常输出。
对于动态对象,属性如下。
主要属性如图所示。在Pattern里,可以定义输出的格式,在输出时间和日期或者货币时尤为有用。上图中的”stretch with overflow”表示当填充值超出定义的大小时,自动换行;”blank when null”表示当数据为null时不显示数据,这两个在某些时候很有用处。
而在表达式一栏中,如果字体为蓝色,则表示不正确,当输入正确的时候,会呈现绿色,如图。
4. 设置数据来源
首先,需要添加一个数据源,此处选用Oracle数据库,步骤如下。
如下图,点击”连结/资料来源”。
弹出下面对话框,点击”New”。(图中已有数据源乃是笔者添加)
选择一个数据来源,这里选择第一个JDBC连接数据库的方式,点击”下一步”。
按照图中的介绍填写相关信息,并测试信息是否正确,然后保存。iReport可以添加保存多个数据源连接信息。
注:如提示找不到相关驱动,则需要将驱动的JAR包复制到iReport的lib文件夹下。
5. 变量、参数及字段
在使用iReport 的过程中会碰到很多与变量(Variables)、参数(Parameters)、字段(Fields)这些有关的内容,我们要介绍这些对象的使用和意义:
·字段(Fields):是数据源抽取出来的,希望在报表中出现的数据库内容。比如一个ID的所有值,$F{ filedsName }。
·参数(Parameters):这是你的应用需要提供给报表的入口,比如你希望在报表被解释的时候提供Where语句的条件值,那么就可以使用参数(Parameters),$P{ parameterName }。
·变量(Variables):这是报表中一些逻辑运算的表现,比如统计值,$V{ variablesName }。
变量
可以通过以下方式添加、修改和删除。
弹出如下对话框:
红框里的是iReport自带的供用户使用的变量,用于计算数量和总值等。点击”新增”,可以增加用户自己的变量,如图。
各个部分功能如标注所示。
参数
定义参数的按钮就在定义变量的旁边,如上节,不赘述。
上图中,红框里的是系统内置的参数,供用户调用,其中包括一些常用的参数,如连接、最大值等等。点击”新增”按钮后,出现如下页面。
在新增参数对话框中输入参数的名称、数据类型、缺省值以及参数的描述信息等。需要注意的是,根据不同的参数类型,在设置参数的缺省值时要使值能与参数类型匹配,即字符型的参数在设置缺省值时要用””把值括起来,如果是数据值型的则不能加””。
参数的引用方式有两种,,一种是$P{},另一种是$P!{},前者可以出现在任意的表达式位置,而后者则只能出现在SQL脚本里,用来替换查询语句,用以按照不同的需求替换查询语句。同时,在脚本里,也有些许区别:前者只能替换语句的部分字段,如SELECT * FROM bugs where name=$P{Name} order by proname, modulename,而对于$P!{},则可以直接在SQL脚本框里输入$P!{SQL}。