JasperReport4.0.1使用手册
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JasperReport4.0.1 用户手册
目录
1.介绍 (4)
2.准备工作 (4)
2.1环境要求 (4)
2.2下载 (5)
3.报表生命周期 (5)
4.报表结构 (5)
5.Report Datasource (6)
5.1 Database JDBC connection (6)
5.2 JavaBeans set datasource (9)
5.3 File CSV datasource (11)
5.4 Microsoft Excel(xls)data source (12)
6.报表元素(Report Elements) (12)
6.1 Static Texts (12)
6.2 Text Field (13)
6.3 Crosstab(交叉报表) (13)
6.3.1 基本设置 (13)
6.3.2 设置报表的语言 (15)
6.3.3 对Row Groups中的变量的操作 (16)
6.3.3 对Column Groups中的变量的操作 (17)
6.3.4 对Measures中的变量的操作 (17)
6.3.5 预览报表效果 (18)
6.4 List (18)
6.4.1 设置List引用的dataset,为List所引用的参数赋值 (18)
6.4.2 设置List中内容的扩展方向 (18)
6.4.3 设置List中内容的扩展个数 (19)
6.4.4 示例中的报表的设计以及运行效果如下图(截取部分) (19)
6.5 Table(表格) (20)
6.5.1 Table如何获得连接 (20)
6.5.2 如何向Table中的参数传值 (20)
6.5.3 如何删除或添加一列 (20)
6.6 Break(分页符) (20)
6.7 Chart(图表) (20)
6.8 Subreport (22)
6.8.1 为子报表的参数传值 (22)
6.8.2 子报表向主报表返回值 (23)
7.其它内容 (23)
7.1 分组报表 (23)
7.2组件对齐技巧 (24)
7.3 Style (24)
7.4 Scriptlet (25)
8、使用中出现的问题以及解决办法 (26)
用户手册中demo 需要导入数据源,导入方法:
1.介绍
iReport 是一个能够创建复杂报表的开源项目,它是用Java 语言编写的,是目前全球较为流行的开源报表设计器。
它是开源报表引擎JasperReport 的可视化设计工具。
由于是开源项目,所以有很强的扩展性。
API 地址: /api/index.html
2.准备工作
2.1环境要求
iReport 运行时需要JDK1.5 及以上版本,
为了能编译我们的报表文件我们需
要完整的安装JDK。
2.2下载
iReport下载地址:/projects/jasperreports
3.报表生命周期
JasperReport 生成的报表文件的生命周期和一个普通的java 类非常相似。
在java 当中,有一个以.java 为扩展名的源文件,内容按java 语言的规则去写,源文件通过编译器编译生成一个.class 文件,当class 使用的时候,它以一个实例的形式通过java 的解释器加载到内存当中。
同样,一个Jasperreports 报表文件也有一个通过DTD 定义的xml 格式的源文件,当报表生成的时候会把这个xml 格式的源文件编译成一个jasper 类型的文件,jasper文件可以在我们的应用程序中被加载生成最终的报表。
4.报表结构
在本章中我们将一起来分析一下报表的结构,看一下报表中每一部分的作用,以及在生成报表的时候每一部分产生的效果。
JasperReports 被垂直分成若干个部分,每一个部分我们叫它为“band”。
每一个band 在都有自己的特性,在报表生成的时候有些会打印一次,有些会打印多次。
Title Band:title段只在整个报表的第一页的最上面部分显示。
pageHeader Band:顾名思义,pageHeader 段中的内容将会在整个报表中的每一个页面中都会出现,显示在位置在页面的上部,如果是报表的第一页,pageHeader 中的内容将显示在Title Band 下面,除了第一页以外的其他所有页面中pageHeader中的内容将在显示在页面的最上端。
pageFooter Band:与pageHeader Band对应,显示在所在页面的最下端。
Detail Band:报表内容段,在这个Band 中设计报表中需要重复出现的内
容。
columnHeader Band:针对Detail Band 的表头段,一般情况下在这个段中画报表的表头。
columnFooter Band:针对Detail Band的表尾段。
Summary Band:表格的合计段,出现在整个报表的最后一页中的Detail band 的后面,一般用来统计报表中某一个或某几个字段的合计值。
5.Report Datasource
Datasource是报表中数据的来源,可以理解为数据库连接。
JasperReport支持很多种的Datasource,在这里只介绍其中的几种。
5.1 Database JDBC connection
此处以Oracle数据库为例。
(例子:demoOfReport\JDBCDatasource.jrxml 数据源:oracle)步骤一:设置Classpath,打开【工具】->【选项】,在弹出的窗口中选择“Classpath”标签页,如图5.1,点击【Add JAR】,选择对应数据库的驱动包。
图5.1
步骤二:设置Connection
图5.2
图5.3
点击【New】,在弹出的窗口中选择【Database JDBC connection】,点击【Next】后界面如图5.4
图5.4
点击【Test 】按钮可以测试连接是否成功,点击【Save 】进行保存。
步骤三:设置query
新建一张空报表后,界面如图
5.5
图5.5
填写对应的sql
图5.6
在图5.6中,【Automatically Retrieve Fields】处的勾选框最好勾上,否则填写完SQL后需要点击【Read Fields】按钮来手动进行操作。
5.2 JavaBeans set datasource
Demos位于demoOfReport\javabean文件夹下
步骤一:写java类Student.java(实体类)和StudentFactory.java(工厂类)
步骤二:设置Classpath,打开【工具】->【选项】,在弹出的窗口中选择“Classpath”标签页,如图5.1,点击【Add Folder】,选择StudentFactory.class(注意是编译后的文件)所在的文件夹。
步骤三:设置Connection
在图5.3所示的界面中点击【New】,在弹出的窗口中选择【JavaBeans set datasource】,点击【Next】后的界面如图5.7
图5.7
步骤四:新建一张空报表(由于操作比较简单,在此不啰嗦了) 步骤五:设置query
图5.8
在图5.8所示的界面中点击【Read attibutes 】按钮后界面如图5.9 自定义的名称
用于获得数据的类名
图5.9
点击界面中的【Refresh Preview Data 】按钮(图5.9中没有截下来)可以浏览数据。
注意:.java 文件的编码格式要设置为UTF-8,否则数据中有汉字时会出现乱码。
5.3 File CSV datasource
Demos 位于 demoOfReport\csv 文件夹下
步骤一:设置Classpath ,选择.csv 文件所在的路径(如何设置Classpath ,见5.1章) 步骤二:设置Connection
与5.1章中的类似,只是选择datasource 时选择的是【File CSV datasource 】,打开界面如图
5.10
选择要进行扩展的字段,点击
【Add selected field(s)】
图5.10
步骤三:设置query Array
点击如图5.5所示的图片,弹出如图5.11所示界面
图5.11
最后点击【OK】保存。
5.4 Microsoft Excel(xls)data source
以Excel作为数据源的情况和以.csv文件作为数据源的情况类似,就不再赘述了。
6.报表元素(Report Elements)
在本章中我们将要解释可以在报表中使用的组件及他们的相关属性和使用方法。
对于所有组件的共通点:
(1)加载方式:将对应的组件拖拽到相应的区域。
(2)查看对应的属性:选中组件,在【属性】窗口中查看对应的属性,如果当前视野中没有【属性】窗口,从【窗口】菜单中选择【属性】。
6.1 Static Text
用于写静态文本,即不是动态的文本。
6.2 Text Field
可以在组件中写各种表达式,如:$F{Field}代表Field字段的值,$V{Var}代表变量Var 的值,还可以在TestField组件中填写java表达式。
6.3 Crosstab(交叉报表)
交叉报表:横向和纵向同时扩展的报表。
下面做一个交叉报表的例子:
6.3.1 基本设置
Demo位置:demoOfReport\ crosstab.jrxml
所用数据源:JasperReport自带的数据源“Sample Database”
在报表中填写SQL:
SELECT OrderId, ShipCountry, Freight, OrderDate, RequiredDate, ShippedDate FROM Orders WHERE ShippedDate IS NOT NULL
将组件放在Summary中,会出现如图6.1所示画面
选择数据来源
图6.1
点击【下一步】,如图6.2
图6.2
选择对应的字段进行纵向扩展。
点击【下一步】,结果如图6.3
选择要进行横向扩展的字段,点击【下一步】。
如图6.4
图6.4
在图6.4所示界面中选择交叉区域中要显示的数据,点击【下一步】后,再点击【完成】。
6.3.2 设置报表的语言
图6.5
6.3.3 对Row Groups 中的变量的操作
图6.6
对变量重命名后,要将报表中引用该变量处的名字修改过来,如图
6.7
图
6.7
填写新名称
可以在【属性】中查看现有属性,以及修改属性。
6.3.3 对Column Groups 中的变量的操作
重命名变量,与6.3.2中对“Row Groups ”的操作相同,将变量名称由“FREIGHT ”变为“FreightColumn ”,并将变量对应属性中的“Bucket expression ”设置为“Integer.valueOf($F{FREIGHT}.intValue()/100)”,“Bucket Value Class ”设为“ng.Integer ”。
将引用变量的组件中内容修改为:
String.valueOf($V{FreightColumn}.intValue() * 100) + "-" + String.valueOf(($V{FreightColumn}.intValue() + 1) * 100)
如图
6.8
图6.8
按照图6.8修改后,对应的组件中的表达式结果为String 类型,所以需要将组件对应的属性“Expression Class “修改为”ng.String “
6.3.4 对Measures 中的变量的操作
修改变量名:选中变量,在【属性】窗口中将“Name ”对应的内容修改为“OrderCount ”。
6.3.5 预览报表效果
预览效果如图
6.9
图6.9
6.4 List
例子位置:demoOfReport\ testRoom.jrxml 数据源:dlpts
6.4.1 设置List 引用的dataset ,为List
在List 组件上右击,选择【设置对应的parameters (这里的参数是对应的dataset
6.4.2 设置List 中内容的扩展方向
图有时,Print Order 扩展属性。
图6.11
6.4.3 设置List 中内容的扩展个数
List 组件的属性中的“Item height ” 和“Item width ”就是List 中的组件的高度和宽度,但是这个高度必须要>=组件的实际高度和宽度,否则会报错,那么List 中的组件的扩展个数就是:List 组件的“width ”/“item width ”。
6.4.4 示例中的报表的设计以及运行效果如下图(截取部分)
6.5 Table(表格)
Table对于扩展实现的效果比较好。
6.5.1 Table如何获得连接
在Table组件上右击,选择“Edit table datasource”,“Sub dataset”选择对应的dataset,“Connection/Datasource Expression”选择“Use connection expression”。
6.5.2 如何向Table中的参数传值
在Table组件上右击,选择“Edit table datasource”,选择“Parameters”选项卡,点击【Add】按钮添加要赋值的参数,以及对应的参数值。
6.5.3 如何删除或添加一列
删除列:假定删除Column 3 ,那么就要在Table中现有的所有Band中,在Column 3处右击,选择“Delete cell”,将Column 3对应的所有cell都删除之后,这一列就会删除。
添加列:在Table组件处,右击,选择“Add Column to the beginning”或“Add Column to the end”选择在最开始或是最末尾添加一列。
注意:最好不要把表格放在Detail中,除非主报表中的查询语句结果只有1条。
6.6 Break(分页符)
将Break组件拖拽到要分页的位置,在弹出的提示框中选择“Page break”即可。
当把Break组件隐藏时就不产生分页功能。
6.7 Chart(图表)
例子位置:demoOfReport\chart.jrxml 数据源:dlpts
拖拽“Chart”组件到对应的band,出现如图6.13所示界面,选择对应的图表样式,点击【OK】。
图6.14 点击【下一步】,界面如图6.15
选择对应的Dataset
对图表的注释文字
点击【下一步】,界面如图6.16
图6.16
点击【完成】后进行预览,效果如图6.17
图6.17
6.8 Subreport
Subreport也是一张完整的报表,只是将它嵌入到主报表中而已。
6.8.1 为子报表的参数传值
选中子报表组件,查看“属性”,在“Parameters”中添加。
注:填写的“Subreport parameter name”必须和子报表中的参数名称对应,大小写也要一致;传到子报表中的表达式的类型假设是ng.String,子报表中对应的参数类型也必须是ng.String。
6.8.2 子报表向主报表返回值
选中子报表组件,查看“属性”,在“Return Values ”中设置返回值,以及返回值的“Calculation Type ”
注1:填写的子报表的变量名称要与子报表中实际对应的变量名称对应,主报表中接
收的变量类型要与子报表中对应的变量的类型相同。
注2:返回值中的“Calculation Type ”假设设定为“Sum ”,但是从下拉框中可能看到
的还是“Nothing ”,可以从xml 视图中查找“returnValue ”,找到对应的子报表代码处,查看实际的“Calculation Type ”,如图
6.18
图6.18
6.8.3 从主报表中如何找到子报表文件的位置
选中子报表组件,查看“属性”中的“Subreport Expression ”,如果此表达式中含有” $P{SUBREPORT_DIR}”,那么就从“Parameters ”中查找参数“SUBREPORT_DIR ”,查看参数的值,就可以找到子报表文件的位置。
7.其它内容
7.1 分组报表
步骤一:填写SQL 步骤二:图 中,在“groupReport ”处右击,选择“Add Report Group ”,填写“Group name ”,并选择以什么分组。
步骤三:经过分组后,报表中多了2个Band ,“Group Header ”和“Group Footer ”。
在“Group Header ”中填写要分组的内容
7.2组件对齐技巧
组件与band 同高时 解决办法一:双击对应的band 的下边界,band 的下边界就可以和组件的下边界对齐了。
解决办法二:【窗口/Fomatting Tools Window 】,选中组件,点击【Adapt to parent height 】 其它情况可以采用上述的方法二进行对齐
7.3 Style
7.3.1 自定义
style
选中对应的style ,在“属性”中设置
style
7.3.2 使用style
选中要设置的组件,查看“属性”,在“Style ”处选择对应的style
7.4 Scriptlet
例子位置:demoOfReport\ Scriptlet.jrxml
在这里只是要稍微提及一下Scriptlet ,下面介绍一个简单的例子。
编写java 类:Scriptlet.java
import net.sf.jasperreports.engine.JRDefaultScriptlet; public class Scriptlet extends JRDefaultScriptlet { public String sayHello(){ return "Hello,I'm the Scriptlet";
}
}
将类的编译路径加入classpath (对于如何添加classpath,见5.1章) 新建一个空报表,如图
7.1
图
7.1
图7.2
在”Title”band 中加入一个组件,内容如图
7.3
图7.3
预览报表,效果如图
7.4
图7.4
8、使用中出现的问题以及解决办法
1、 使用Table 组件时,在Table 中使用子报表,子报表有返回值时,对子报表报空指针异常
解决办法:查看主报表中接收子报表的变量,并把这些变量复制到Table 对应的dataset 中。
2、 组件内容过多,不能显示全部内容
解决办法:设置组件的属性,勾选“Stretch With Overflow ” 3、 如何隐藏组件
解决办法:组件的“Print When Expression ”属性,当表达式的值是false 时就隐藏组件
4、 提示错误:变量not compatible …
检查对应的变量的类型是否一致,一般是主报表与子报表中对应的变量 5、 当报表查询无数据时会弹出提示框“The document has no page ” 解决办法:
Scriptlet.java 中的方法
按如图所示操作后,查看“属性”中的“When No Data ”属性,选择“All Sections,No Detail ” 6、
解决办法:选中组件,点击属性“
解决办法:将主报表中的字段所对应的组件的Stretch Type 属性选择为Relative To Band Height ,修改后的效果如图
9、使用List 组件时出现List contents width must be positive. 解决办法:查看List 组件的Item Width 属性是否为0。