Posted on 2005-02-02 12:27
海天一鸥 阅读(1084)
评论(0) 编辑 收藏 所属分类:
报表专题
软件工程师, 湖南省长沙铁道学院科创计算机系统集成有限公司
2005 年 1 月
现在很多公司和个人都在使用iReport制作报表模板,我接触的时间也不长,在这里,我将我在实践过程中的一些经验以及碰到的一些问题和大家一起来探讨。
一、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"必须和模板时定义的参数名称一致。
三、结束语
到此整个模板就算完成了,有什么没有说明白或者错误的地方,希望你能和我一起来讨论。