一步一步学iReport + JasperReports(二) :JasperReport初级教
本文可以定位于 认识IReport这个IDE本身及其基本用法 ,学习时,你不需要全部实现此文章中的例子,只要理解便可,具体用法将在后面提到, 本文主要讲述了ireport的下载、安装和界面介绍,以及基本的使用方法:通过连接一个mysql的数据源,设计一个列表式的报
本文可以定位于认识IReport这个IDE本身及其基本用法,学习时,你不需要全部实现此文章中的例子,只要理解便可,具体用法将在后面提到, 本文主要讲述了ireport的下载、安装和界面介绍,以及基本的使用方法:通过连接一个mysql的数据源,设计一个列表式的报表,并讲述了在Java程序中使用此报表的基本步骤。报表的结果预览如下图:
,http://www.川江号子.cn 。
另,本人有Word电子文档格式,如需要,请联系本人:asima127@gmail.com
1 下载iReport
iReport是一个可视化的报表模板设计工具,使用此工具能方便地对报表进行设计。在iReport中已经包含了jasperreports在运行时需要的jar文件,在项目中的lib目录中包含Jasperreports-***.jar即可,其中***为版本号,比如2.0.3。
下载地址:http://sourceforge.net/project/showfiles.php?group_id=64348,此文档编写时版本为2.0.3,如图:
点击download出现以下界面:
可以看到提供了多种下载包,其中:
? iReport-2.0.3-src.zip:为iReport的源代码
? iReport-2.0.3.tar.gz:为.tar.gz格式,一般用于Linux、Unix等非windows系统
? iReport-2.0.3-windows.installer.exe:为exe格式,一般用于windows系统
? iReport-2.0.3.zip:为zip格式,可以用于各类操作系统
本文使用window版本为例,因此下载iReport-2.0.3-windows.installer.exe即可。
2 安装iReport
安装iReport需要先设置JDK环境,2.0.X版本要求JDK1.5环境(另参考文档)。
如果是windows系统,直接双击安装图标 即可。(如果是下载的ZIP文档,则将其解压到指定的目录,还需运行bin/startup.bat)。
如果是其他系统,比如Linux,Unix等,解压下载的安装文件(如下载的是tar.gz格式,使用tar xvfziReport-2.0.3.tar.gz进行解压,如下载的zip格式,使用zip命令解压),然后运行bin/startup.sh即可。
以下以在windows上安装为例:
A. 欢迎界面,点击“Next >”继续
B. 阅读license内容,点击“I Agree”继续
C. 选择安装组件,点击“Next >”继续
D. 指定安装路径,点击“Next >”继续
E. 指定程序组名称,点击“Install”即可
F. 等待安装过程
G. 安装结束,点击“Finish”完成
在桌面上会出现如此图标: 。
3 编辑一个报表模板
3.1 启动iReport
启动iReport-2.0.3,如图:
iReport启动会根据运行的机器的Locale属性自动设置软件语言(Language),这里可能会出现一些偏差,笔者使用的是简体中文,但启动后设计界面是繁体中文,因此我们需要对其进行设置。
3.2 设置默认语言
工具栏->“工具”(或“Option”)->“選項”
更改语言种类,从下来菜单中选择“中文(中国)”。如果打开就是此项,可以先更换成别的种类(比如“中文”),然后再次进入此界面将其更换成“中文(中国)”。
点击“存檔”后,可以看到界面变成了“简体中文”:
3.3 其他设置
此步不是必须的,根据需要设定。
使用iReport新创建的报表模板为.jrxml格式,编辑完毕后需要编译,编译会产生.jasper文件,在运行时需要编译好的.jasper文件。这原理类似java程序,源代码文件是.java,编译好之后是.class文件,在应用的时候只需要.class文件。
由于安装好之后默认的产生.jasper文件就在当前目录,为了便于管理,可以对iReport设计软件进行一些设置,统一目录来保存编译好的jasper文件。
iReport可以有多种方式进行报表预览(pdf、excel)等,每次预览时候,如果选择这些格式,那么会产生这些文件,也可以通过此设置统一保存。
工具栏上“Option”->“选项”,然后在选项卡上选择“Compiler”,对“Default compilation directory”和“Directory where the paged out data is stored”进行设置,点击旁边的“浏览”即可进行目录选择。
如果编译不希望保存自动产生的java文件,可以去掉“keep .java file”前面的勾选。
3.4 新建报表模板Sample
A. 工具栏->“档案”->“开启新档”
B. 输入报表名称,本文为“sample”,点击“OK”继续
C. 如图界面
如图,可以看到报表模板正文分几个区域,解释如下:
? title
title 段只在整个报表的第一页的最上面部分显示,除了第一页以外,不管报表*有多少个页面也不会再出现title段中的内容。
? pageHeader
pageHeader 段中的内容将会在整个报表中的每一个页面中都会出现,显示在位置在页面的上部,如果是报表的第一页,pageHeader中的内容将显示在title段下面,除了第一页以外的其他所有页面中pageHeader中的内容将在显示在页面的最上端。
? columnHeader
针对detail段的表头段,一般情况下在这个段中画报表中列的列标题。每页均会出现一次。
? detail
报表内容段,在这个段中设计报表中需要重复出现的内容,detail段中的内容每页都会出现。
? columnFooter
针对detail段的表尾段,每页均会出现一次。
? pageFooter
显示在所在页面的最下端,每页都显示,最后一页由lastPageFooter替代
? lastPageFooter
最后一页页尾段内容,只在最后一页出现一次。
? summary
表格的合计段,出现在整个报表的最后一页中的detail段的后面,一般用来统计报表中某一个或某几个字段的合计值。
D. 创建数据库类型的JDBC数据源
iReport支持多种数据库,本例采用mysql作为示例
工具栏上“Data”->“连结/资源来源”
在“Connections/Datasources”界面中点击“New”
在“Connections properties”中选择“DatabaseJDBC connection”,点击“Next”继续,这里可以看到,jasperreport的数据来源可以有很多方式:数据库、XML文件、JavaBean文件等,从下图中可以看出来。
E. 指定数据库JDBC类型和JDBC URL
其中,iReport中已经包含了mysql和hsqldb这两种数据库的驱动jar文件,可以根据实际需要选择不同的JDBC Type,(记得拷贝相应的数据库JDBC驱动jar文件到项目的lib目录中)
根据实际内容,输入JDBC URL和用户名及密码
输入完成后,点击“Text”,如出现如下界面,说明连接成功。
点击“save”保存,在列表中可以看到此连接的配置
F. 设置报表查询
工具栏“Data”->“报表查询”
出现如下界面:
可以看到数据源有多种方式,这里我们使用Report Query方式,这种方式可以直接选择Query Lanuage种类,然后再在编辑框中输入SQL语句。
如:select * from employee,然后会自动读取相关表的结构出来,如图:
点击“OK”以后,这些表的Field Name将会被加入到“Document structure”的“Fields”部分,如图:
这里也可以采用另一种方式,就是引入参数,这样可以在调用的时候根据业务规则比较灵活地通过设置参数来改变数据内容:
在“Document structure”区找到“Parameters”,右键单击后,选择“Add…”,再选择“Parameter”,如图:
输入以下内容,ParameterName在报表查询界面中要使用,或在自己的业务逻辑中使用,可以改变,这里也可以给一个默认值,即Default ValueExpression内容,注意Parameter Class Type类型,本例使用默认的java.lang.String
在“报表查询”编辑内容中就指定为使用此参数,格式为“$P!{parameterName}”,本例中就使用“$P!{SQLSTR}”,输入后,同样可以看到表结构会自动更新出来,点击“OK”,同样会把这些表结构内容放置到“Fileds”区域中。
G. 编辑报表模板
如图:在编辑区中对应的段中放置需要的要素,要素有很多种,常用的有以下几种类型:
? 静态文本内容 :这些内容是固定不变的文本内容,如上图的“Test Report”
? 参数(Parameter):如上图“$P{SQLSTR}”
? 字段(Fields):如上图“$F{EMPLOYEE_ID}”
? 变量(Variables):如上图“$V{PAGE_NUMBER}”
从这里面把需要的内容拖出来放置到模板编辑区中
相应的段中即可。
H. 编译预览
在工具栏上找到 ,分别是编译、执行、执行(动态连结),点击编译将会产生.jasper文件,点击执行会先编译再预览(如果设定了对应的预览)。
预览有多种方式,点击工具栏上“建立”,可以看到如下图多种预览方式:
根据需要选择预览类型,还要注意,如果没有对应的软件(比如Adobe Reader)来查看生成好的文件,那不会看到效果,iReport会在对应的目录生成文件而已(见3.3节)。
如何设置文件的查看软件,还是在工具栏上点击“Options”->“选项”,然后在选项卡中选择“External Programs”,再对每一种需要设置的格式选择对应的查看软件,如图:
这样,指定了预览文件的类型,又指定了预览的软件,点击预览时就会采用对应的润见展示出来。
I. 预览效果
J. 报表模板制作完成
4 Web中使用iReport
4.1 开发工具
开发工具使用eclispe3.2.2和MyEclipse5.0搭配开发。环境配置参考另外的手册。
4.2 创建项目
打开Eclipse,在工具栏中,“File”->“New”->“Other”
创建一个web项目,选择“MyEclipse”下的“Web Project”,点击“Next”下一步,如图:
输入Project Name,本例为“iReportTest”,点击“Finish”完成如图:
在项目列表中可以看到iReportTest的项目:
4.3 导入jar文件
在项目中找到“WebRoot”->“lib”,右键单击,选择“Import…”,如图:
选择“General”->“File System”点击“Next”继续
点击“Browse…”,指定jar文件,这里初级学者可以指向Jasper安装目录下的lib目录中所有的jar文件,这样可以快速看到效果,可以排除其中的txt文件。
项目中可以看到jar文件被引入了,如图:
4.4 导入jasper文件
在WebRoot下建立目录report,并把3.4节编译好的jasper文件导入进来。
4.5 处理带有中文的报表
当生成为PDF格式时,可能会发现中文内容无法显示,主要是设置font时候需要注意以下几点:
1. 设置的字体的Font Name需要是能显示中文的,比如宋体、SansSerfi
2. 设置PDF Font Name为STSong-Light
3. 设置PDF Encoding为UniGB-UCS2-H (Chinese Simplified)
4. 是否lib中包含iTextAsian.jar文件
右键单击需要改变字体的内容,选择“属性”,在选项卡中选择“Font”,做如图更改:
PDF预览效果如下:
4.6 字体属性统一设置
在上一节中是针对每一个字体框进行设置,如果需要设置100个的话,这样一个一个去设置就显得比较繁琐,减低了效率。
iReport提供了一个功能,就是把这种设置配置好,然后只是需要的时候选择就可以了。在工具栏中“格式化”->“Style”(2.0.3是推荐使用这种方式,如果早期版本是选择“字体”),如图:
点击“New”创建一种新格式,命名为“宋体”,再进行相关设置,如图:
这样,这个“宋体”的Style就设置好了,在设定字体的时候就不需要再到选项卡一项一项地进行设置,在字体的属性中选择“Common”选项卡,在Style中选择这个“宋体”即可:
4.7 创建显示HTML格式报表的JSP文件
在WebRoot根目录下创建jsp文件testhtml.jsp,内容如下:
page contentType="text/html;charset=GB2312"%> page import="net.sf.jasperreports.engine.*"%> page import="java.util.*"%> page import="java.io.*"%> page import="java.sql.*"%>
//报表编译之后生成的.jasper文件的存放位置 File reportFile =new File(this.getServletContext(). (1) getRealPath("/report/sample.jasper"));
String url="jdbc:mysql://localhost:3306/db"; Class.forName("com.mysql.jdbc.Driver"); Map parameters =new HashMap(); //"SQLSTR"是报表中定义的参数名称,其类型为String型 //设置SQLSTR参数的内容,根据需要赋值sql语句 parameters.put("SQLSTR","select * from employee"); (2) Connectionconn =DriverManager.getConnection(url, (3) "username","password"); JasperRunManager.runReportToHtmlFile(reportFile.getPath(), (4) parameters,conn); response.sendRedirect("report/sample.html"); (5) %> |
代码说明:
1. 定位jasper文件
2. 给报表模板中使用到的参数SQLSTR赋值,这里指定一个sql语句
3. 采用JDBC方式连结数据库
4. 生成HTML文件,参数分别为报表文件模板物理位置,报表参数,数据库连结
5. 转向到此页面,这个页面是固定的,需要和报表模板的位置和路径相同
发布项目后预览,输入http://localhost:8080/iReportTest/testhtml.jsp(本例采用tomcat作为web服务器,发布过程参考其他文档,数据库采用的mysql)
效果:
4.8 创建显示PDF格式报表的JSP文件
在WebRoot根目录下创建jsp文件testpdf.jsp,内容如下:
page contentType="application/pdf;charset=UTF-8"%> page import="net.sf.jasperreports.engine.*"%> page import="java.util.*"%> page import="java.io.*"%> page import="java.sql.*"%>
//报表编译之后生成的.jasper文件的存放位置 File reportFile =new File(this.getServletContext(). getRealPath("/report/sample.jasper"));
String url="jdbc:mysql://localhost:3306/db"; Class.forName("com.mysql.jdbc.Driver"); Map parameters =new HashMap(); //"SQLSTR"是报表中定义的一个参数名称,其类型为String型 parameters.put("SQLSTR", "select * from employee where employee_id like 'Z%'"); Connection conn = DriverManager.getConnection(url, "username","password");
byte[] bytes=JasperRunManager. runReportToPdf(reportFile.getPath(),parameters,conn);
response.setContentType("application/pdf"); response.setContentLength(bytes.length);
ServletOutputStream outStream = response.getOutputStream(); outStream.write(bytes,0,bytes.length); outStream.flush(); outStream.close(); out.clear(); out = pageContext.pushBody(); %> |
效果如下: