使用 iReport 制作报表模板

Comments

一、iReport 介绍

说到 iReport 不得不先介绍 Jasperreport,Jasperreport 是一个报表制作程序,用户需要按照它制定的规则编写一个 XML 文件,然后得到用户需要输出的格式文件。它支持输出的文件格式包括 PDF,HTML,XML,XLS,CVS 等等。而 iReport 就是一个制作 Jasperreport 的 XML 文件的可视化开发工具。

二、模板制板

首先必须下载一个 iRport(地址:http://ireport.sourceforge.net),现在的最高版是 0.4.0,我们这里使用的是 0.2.2。

将 iReport 解压缩以后编辑目录下的 iReport.bat 文件即可,如下

 @echo off 
 set JAVA_HOME=C:\j2sdk1.4.0_03 
 set ANT_HOME=C:\ant 
 set IREPORT_HOME=C:\Documenti\progetti\iReport\iReport2\ 
 rem %ANT_HOME%\bin\ant javadocs 
 %ANT_HOME%\bin\ant iReport

只要设置相应的一些路经就可以,这里是采用 ant 来运行,当然如果你没有安装 ant 也不想安装它,那么也可以,找到 noAnt 文件夹下的 startup.bat 文件即可运行。

建立新模板时,便得到如图所示的界面。

选中菜单项"Datatsource",单击其子菜单项"Connection/Datasources",便会弹出一个编辑框,选择"New"按钮,

输入数据源名称,选择 JDBC Driver,在输入 JDBC URL 时,可以点击"Wizard"按钮,它会根据你选的 JDBC Driver 配置好你的 URL,不过得修改 IP 地址以及 DatabaseName,输入数据库名、用户名、密码。点击"Test"按钮,确定连接情况,然后保存。

下图是我做好的一个报表模板:

$F{} 是用来标明这是数据库字段。$F{WINDOWS_NAME}、$F{NUMBER}、$F{vname}、$F{SP_NAME} 和 $F{SP_TYPE} 是数据库里的字段,也是我要在模板里用到的字段。对于 $F{NUMBER}、$F{vname}、$F{SP_NAME} 和 $F{SP_TYPE} 这四个字段,虽然放在其他域也可以显示出结果,比如:pageHeader 域、columnHeader 域、columnFooter 域等等,但是因为会有多列的数据要显示,所以必须放到"detail"域中。

模板画完了,现在来配置模板的查询语句,以及字段、变量和参数。

首先输入查询语句,如"select * from v_baseinfo_statbanjiereport",点击"Read fields"按钮,会查询出该表的所有字段名

如果您要有条件的查询,那么就在后面添加 Where 语句,如"select * from v_baseinfo_statbanjiereport where DEPT_NAME=$P{orgname} and END_SP_DAY=$P{etime}",点击"Save query to report"按钮保存。

这里要提醒大家注意的是,您可以直接把参数写入 Where 语句中,象这样"where DEPT_NAME='中国' and END_SP_DAY='2004-11-23'";但是从 java 程序或者 jsp 页面传过来的参数是中文字符的话,您就必须做编码转换或者用英文字符、数字来代替;还有像日期参数"2004-11-23",jasperreports 好象解析不了,如果你把 SQL 语句改成" select * from v_baseinfo_statbanjiereport where DEPT_NAME='$P{orgname}' and END_SP_DAY='$P{etime}'",那么又会抛出异常,因为 Jasperreport 会先把 SQL 语句设置成预编译语句"select * from v_baseinfo_statbanjiereport where DEPT_NAME= ? and END_SP_DAY= ?",所以 SQL 语句中用到参数的时候,除了其特定的"$P{}"符号外,不能有别的标点符号,传进去的参数值也尽量不要带标点符号,所以日期格式得改成"20041123"。

设置模板字段:

设置模板参数:

当这些全部做完后,点击"Save"按钮,就会生成一个 XML 文件,再点击"Compile"按钮,就会生成一个后缀名为 jasper 的文件。

现在可以预览一下模板的效果,先选择菜单项"Build"的子菜单项"PDF preview"、"HTML preview"、"JAVA 2D preview"、"Excel preview"、"CSV preview"和"JRViewer preview"中的一项(对这些项显示工具的配置在菜单项 Tools\Options.. 下的 External programs), 再点击"Execute report";如果你想带数据预览,还得先激活一下刚配置的数据源,选中菜单栏"Build"下的子菜单栏"Set active connection",会弹出一编辑框,选中一个数据源名称,点击"OK"。

此时我们就要引入一个 jsp 页面,假设是 pdf.jsp,那么下面就是 pdf.jsp 的代码:

<%@ page import="dori.jasper.engine.*" %> 
<%@ page import="java.util.*" %> 
<%@ page import="java.io.*" %> 
<%@ page import="java.sql.*" %> 
 
<% 
    File reportFile 
        = new File(application.getRealPath("/reports/ribanjietongji.jasper")); 
 
    Map parameters = new HashMap(); 
    parameters.put("orgname", "zhongguo"); 
    parameters.put("etime", "20041123"); 
    Connection conn=null 
	
    // 以下忽略得到数据库连接过程
    // ……
		
    byte[] bytes = 
        JasperRunManager.runReportToPdf( 
            reportFile.getPath(), 
            parameters, 
            conn 
            ); 
	
        response.setContentType("application/pdf"); 
        response.setContentLength(bytes.length); 
        ServletOutputStream ouputStream = response.getOutputStream(); 
        ouputStream.write(bytes, 0, bytes.length); 
        ouputStream.flush(); 
        ouputStream.close(); 
%>

程序里面要和大家说明的就是,"/reports/test.jasper"这个路径是相对于你这个 jsp 页面的,比如你的 jsp 页面保存在 D:\\..\ROOT\ 目录下,那么你就必须在这个目录下建一个 report 目录,然后把你做好的报表模板文件放到该目录下来。

		 Map parameters = new HashMap(); 
	 parameters.put("orgname", "zhongguo"); 
	 parameters.put("etime", "20041123");

"orgname"和"etime"必须和模板时定义的参数名称一致。

三、结束语

到此整个模板就算完成了,有什么没有说明白或者错误的地方,希望你能和我一起来讨论。


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Java technology
ArticleID=58194
ArticleTitle=使用 iReport 制作报表模板
publish-date=01012005