一、 iReport 是什么
iReport 是一个能够创建复杂报表的开源项目,并且它能调用JasperReports 库应用于任何一种java 应用程序。本身是分布式的且由符合GNU 通用公共许可的百分之百纯java 编写。
由于它丰富的图形界面,你能够很快的创建出任何一种你想要的报表。iReport 能够让我们提高技术方面的信心,比如它能降低学习JasperReports 的XML 语法的难度,而且能够为熟练的技术人员节省大量的时间并能开发出非常精细的报表。
二、 iReport 的下载与安装
JasperReport 的下载地址: http://jasperreports.sourceforge.net/index.html
iReport 的下载地址: http://sourceforge.net/projects/ireport
可能有几种不同的分类
iReport-x.x.x.zip 这是官方的zip 格式的二进制文件。
iReport-x.x.x.tgz 这是官方的 tar gz 格式的二进制文件。
iReport-x-x-x-src.zip 这是官方的包含源代码的zip 格式的二进制文件。
x.x.x 表明了iReport 的版本号。每一种都包含必须使用的第三方的库和程序及附加文件,例如模板和一些html 格式的基础教程。
三、 iReport 的配置
iReport 的初始化配置包括:设置所要查看运行后的文档的格式;选择语言;设置编译后的文件目录。我们要配置 iReport 必须运行刚刚安装的 iReport 。然后选择菜单选项中工具选项(menu Options → Tools . )。
首先出现如下图的界面( 图1.1) 。 此选项卡是一些简单常规的设置。
图 1.1
这个选项卡 ( 图 1.2) 是用来设置编译后的文件存储目录,默认的目录会在 iReport 的根目录。一般情况下是要指定一个有效的目录来保存编译文件。这个目录也可以是加载报表源时的目录。笔者的文件存储目录是 D:\J2EE\iReport ,以后所有的报表文件都将被保存在这个目录下。
图 1.2
这个选项卡 ( 图 1.3) 设置 iReport 编译后用来预览报表的外部程序。笔者这里只设定了 IE ,其它没有设定的编译之后 iReport 会为你生成一个对应格式的文件保存在上面设置的默认目录下,但不会打开。
图 1.3
四、 创建 JDBC 连接
任何一种动态报表都需要一个数据源, iReport 支持任何一款关系型数据库作为数据源。
首先我们来看一下怎么建立一个数据源的连接。点菜单 ( 图 1.4) ,出现一个 Connections /Datasources 对话框。
图 1.4
图 1.5
笔者这里已经创建了两个数据源。如果你是第一次使用 iReport 工具来作报表的话,那么你就要首先来创建数据源的连接。点击 New 新建一个数据源连接。将出现 ( 图 1.6) 一个 Connections properties 对话框。这里有很多种数据源类型,我们程序员常用的只有 Database JDBC connection 、 XML file data source 、 JavaBeans set data source 、 EJBQL connection 这几种。其它的一般程序员很少用得到的。 ( 呵呵 ….. 这是笔者个人的看法 )
图 1.6
我们选择 Database JDBC connection 后点击 Next 出现一个数据源连接的配置属性对话框 ( 图 1.7) 。以下是针对笔者的 Oracle 10 数据库连接配置。
图 1.7
配置好后我们需要测试一下是否连接成功。点击 Test 进行测试如出现 Connectin test successful 则表示连接成功 ( 图 1.8) 。
注意:这里有一个 Save password 复选框,如果你选种了此复选框,则它会将密码保存到一个 .txt 文件里面,如果你的密码不想被暴露话的话,建议不要选此复选框。
图 1.8
创建一个连接后此连接后,笔者的 iReport 就有三个数据源了(图 1.9 )。
图 1.9
注意:我们创建数据源连接时一定要有数据库连接驱动的支持。 iReport 只为我们符带了一个 MySQL 的驱动包,并且不定符合你的 MySQL 数据库的版本。所以我们连接任何一种关系型数据库时都要将驱动拷贝到 iReport 的安装根目录下的 lib 目录里。
五、 第一个简单的报表
第一个报表我们就采用 iReport 本身的报表精灵向导来创建一个简单的。 iReport Wizard 是一个用来一步步创建报表的工具。点击 ( 图 2.0) 菜单档案 à 报表清灵,将出现一个 iReport Wizard 对话框 ( 图 2.1) 。
图 2.0
iReport Wizard 工具可以根据你以往的模版进行报表的创建。也可选择你已经配置好的数据库连接作为此报表的数据源,然后编写 SQL 语句或导入已有的 SQL 文件。即使你不会写 SQL 语句也可以做出一个漂亮的报表出来,因为它有一个 Design… 按钮(图 2.2 ),专门为一些不会写 SQL 语句的人所设计的。
图 2.1
在此视图中你可以选择你要使用的表和表字段,并且它帮我们把表的关系给体现出来了。
图 2.2
下一步需要选择我们要在报表中显示的字段 ( 图 2.3) 。
图 2.3
根据此向导我们可以创建四个组 ( 事实它可以设置很多的组 ) 。
图 2.4
向导为我们提供几套显示模版供我们选择 ( 图 2.5) 。
图 2.5
最终它根据我们的设定生成了一份报表(图 2.6 )。
图 2.6
所有的工作已经全部完成,只需要执行报表就可以了。 点击后面这个执行动态报表将出来下图 ( 图 2.7) 的报表结果。
图 2.7
如何支持中文。
这个报表的所有数据都是英文的,如果您的数据有中文的话,那么您还需要进行一步设定 ( 图 2.8) ,要修改的地方有三个, 1.Font Name 改成中国的字体。 2.PDF Font Name 改成 STSong-Light 。 3.PDF Encoding 改成 UniGB-UCS2-H (Chinese Simplified) 。就 OK 啦。
图 2.8
上面我只做了一个简单的报表,其实 iReport+JasperReport 最大的靓点就是设计可视化的图表报表,下面是笔者做的一个简单的图形报表(图 2.9 )。
图 2.9
六、 图形报表 ( 饼图 )
新建一个 chatReport 报表
编写 SQL 语句(图 3.0 )。查询每个部门有多少个职员。
图 3.0
选择工具栏中插入饼图的快捷键 (图 3.1 )
图 3.1
出现一个图形报表选择向导。我们选择第二个三维饼图 ( 图 3.2) 。
图 3.2
点击 OK 之后,在报表的设计器中出现一个三维饼图(图 3.3 )。我们需要设置饼图的一些属性,通过右键 Chart Properties 来完成属性的设定。
图 3.3
出现了 Chart Properties 对话框后,选择 Chart Data 选项卡图形报表的数据,设置其数据来源。
对应部门的职员的个数 |
部门名称 |
图 3.4
关闭设计视图。然后选择我们要预览的格式 ( 图 3.5) 。
图 3.5
注意:在生成 PDF 预览时,需要向 iReprot 的 lib 目录下加入一个 iTextAsian.jar 的亚州语言包,用于处理亚州语言的乱码的问题。 iTextAsian.jar 现在很难下载得到了,如果你需要的话给我一个邮件,讲明你所要的东西。
点击工具栏的 编译运行,最终执行报表的效果 ( 图 3.6) 。
图 3.6
七、 一劳永益的解决中文的问题
前面提到过报表中的中文问题,上面给出的解决方案比较麻烦需要对每个字段进行设定,下面给出一个通用的设定,可以应用到所有的字段,这样我们只须做一次设定永久使用。
第一步:添加一个自定义的字体 ( 图 3.7) 。
图 3.7
弹出一个添加自定义字体的对话框(图 3.8 )。
图 3.8
点击添加一个新的字体。要想中文不出现乱码,则要跟我的配置一样(图 3.9 )。
图 3.9
配置已完生,以后在使用的时候只要选中字段然后右键属性,在 Font 选项卡中 Report Font 中选择 我的字体就 OK 了(图 4.0 ),不用像上面那样子每次都要同时修改三个地方了。
图 4.0
八、 应用程序调用 JasperReport 报表
应用程序包结构 ( 图 4.1) 。
图 4.1
Servlet 代码:
iReport 工具的 lib 目录下的 .jar 全部拷贝到工程下面。
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
// 报表编译之后生成的.jasper 文件的存放位置
File reportFile = new File(
request.getRealPath( " jasperreport/employee.jasper " ));
// 传递报表中用到的参数值
Map < String, String > parameters = new HashMap < String, String > ();
// "name"是报表中定义过的一个参数名称,其类型为String 型
// parameters.put("name", value);
byte [] bytes = JasperRunManager.runReportToPdf(