1. 开发使用步骤(iReport4.1)... 2
4.1. JasperReport 和iReport的介绍... 2
4.1.1. JasperReport 简介... 3
4.1.2. iReport 简介... 3
4.1.2.1. iReport几个重要的概念... 3
4.1.2.2. iReport数据库连接的建立 DataSource. 5
4.2. 创建报表(以几个不同类型的报表为例)... 7
4.2.1. iReport基本报表(例:预交费用和押金报表)... 7
4.2.2. iReport子报表SubReport(例:批量打印报表)... 13
4.2.3. iReport table类型的表单(例:押金报表)... 21
4.2.4. Dorado7中iReport的配置... 24
网上有这个软件的详细介绍。可以搜索下,进一步了解。这里只是简略介绍。
l 一个报表是由一个源代码的文件来描述,这个源文件就是由DTD(jasperreport.dtd, version 0.6.3 is listed in Appendix B)来定义的XML标记。在0.5.3版本中它的源文件扩展名变成了.jrxml; 取代了一般的.xml扩展名。报表的源代码被编译成jasper文件(扩展名是.jasper)。
l jasper文件是一种预报表,严密的说就像是java的类被封状成的对象。Jasper文件通过你的应用程序来加载。它被添加一个数据源的标记从而创建报表,接着它就能以你想要的格式输出(例如:pdf或xls)。
l iReport也是开源组织sf.net中的一款免费软件,其主要作用是用来以可视化的方式设计生成JasperReport 所使用的报表格式文件,因为JasperReport 本身并未提供很好的可视化报表设计工具,iReport 的出现正好弥补了这个缺陷。
l 现在的iReport 的最新版本是4.1.3
l iReport运行时需要sun java2 SDK 1.5及以上版本,为了能编译我们的报表文件我们需要完整的安装JDK。
报表的动态对象变量、参数、字段
l 字段(Fields):是数据库抽取出来的,希望在报表中出现的数据库内容。比如一个ID的所有值。$F{ filedsName }
l 参数(Parameters):这是你的应用需要提供给报表的入口,比如你希望在报表被解释的时候提供Where语句的条件值,那么就可以使用参数(Parameters)。$P{ parameterName }
l 变量(Variables):这是报表中一些逻辑运算的表现,比如统计值。$V{ variablesName }
报表结构
报表被垂直分成若干个部分,每一个部分我们叫它“band”。每一个band都有自己的特性,在报表生成的时候有些会打印一次,有些会打印多次。报表的结构大致是几个部分:title、pageHeader、columnHeader、detial、columnFooter、pageFooter、summary、groupHeader、groupfooter。如下图:
l Title:title 段只在整个报表的第一页的最上面部分显示,除了第一页,不管报表中有多少个页面也不会再出现Title band 中的内容。就是报表的标题。
l pageHeader:pageHeader 段中的内容将会在整个报表中的每一个页面中都会出现,显示的位置在页面的上部。如果是报表的第一页,pageHeader 中的内容将显示在Title Band 下面,除了第一页以外的其他所有页面中,pageHeader 中的内容将显示在页面的最上端,即页眉。报表的一些公共要素,比如页码、创建时间、创建人等信息放置在这里是比较好的选择。
l columnHeader:无可非议的这里是放置列的名称,记住不是列数据。
l Detial:报表内容段,在这个Band 中设计报表中需要重复出现的内容,Detail 段中的内容每页都会出现。比如销售记录数据。
l columnFooter:放置列级别的统计计算值或是列的说明。
l pageFooter:显示在所在页面的最下端,即页脚。放置页级别的统计值或是页的说明。
l 打开iReport软件后点击Report Datasources
l 点击new创建一个新的连接,选择Datasource
l 填写连接名称选择正确的驱动和URL等,点击测试。成功后保存即可。
注:如果Driver为红色则表示没有这个驱动。需要添加相应的jar包。例如没有ORACLE的驱动。添加jar包步骤
IReport中菜单栏中“工具”—“选项”—“classpath”—“AddJar”,添加 Ojdbc.jar文件。
利用iReport工具进行报表开发。以实例说明iReport的基本用法和小技巧。
1.1.
1. 打开iReport。文件-à新建-à选择BlankA4-àOpen this template
2. 为这个报表起名,并选择保存位置,点击下一步
3. 完成(新建空白报表完成)
4. 开始设计。
右键点击报表名称,选择 editorquery打开report query 界面设计自己的sql语句(建议先写一条参数固定的SQL),SQL设计好后会出现如下图,右侧的参数先不用管,点击OK按钮保存
5. 回到主界面,可以在左侧Fields节点中看到SQL中查询出来的所有字段
6. 表单的设计。
根据需求设计报表,组件面板中有各种不同的控件(控件此处不介绍使用方法)可以根据自己的需要选择,拖动左侧的Fields中的字段放到需要的位置,如图
l 合计。
在左侧Variables右击添加字段,在属性中设置其属性,Variable Class建议使用java.math.BigDecimal(可以保留小数),Calculation中是几不同的函数,根据需要这里选择sum,在Variable Expression 中选择需要求和的字段,把Variables中的SUM字段拖到表单中需要的位置就可以啦。
l 预览以及参数的设计。
点击Preview预览效果,如果没有问题,开始设计参数,也就是调整SQL语句。
参数:在主界面的Parameters中添加需要的参数,并在属性中配置。然后保存
l 调整SQL语句。
重新打开iReport Query 界面,这时候你可以在右侧看到自己设计的参数,拖动参数替换sql语句中之前固定的参数即可。这样,当调用这个报表的时候,以同样的参数名称的参数传给报表即可(前台如何调用报表以及如何传参在后面Dorado7中iReport的配置中说明)。
点击保存后,查看预览这时候就会提示你输入参数,输入适合的参,报表设计完成
(注:这是一个简单的报表制作。主要显示iReport的基本功能,步骤相对详细,下面的报表主要显示一些技巧,重复的步骤不再截图)
1. 首先设计出一个子报表(在主表中需要显示的部分),同样有参数的设置,设
计步骤如上。以批量打印为例,选择一栋楼,将该楼中查出来的不同的客户信息作为参数传给子表,批量打印客户的缴费信息。子表设计如图:
2. 主表的设计。
在主表的Detail部分(根据情况而定)中加入SubReport控件来添加子报表。拖入时,选择好本地已经存在的report(子表.jrxml原文件)。
3. 点击下一步,到看到子表的参数的时候先不考虑点击下一步,点击完成,这时候你就可以看到下图。子表已经和主表联系了起来。
点击下一步,完成。
4.主表与子表间的参数传递。
如:子表中定义了一个参数house2clientid。把主表中查询出来的值赋给这个参数。在主表中点击添加的SubReport控件查看属性。在parameters中添加参数house2clientid并定义指定是主表中的哪个字段。点击ValueExpression右侧的编辑图标,选择值,确定。这样主表选的那个字段就作为参数传给了子表。
技巧1:如何将子表中的合计传递给主表使用(子表向主表传参)
1. 例:在子表中Variables中添加一个求某个字段的合计的参数sum,属性设置如图:
2. 在主表中同样添加名称一模一样的参数sum ,并且属性的配置一样
3. 在主表中选中添加的SubReport控件查看属性中最后一项Return Values,编辑calculation type中有不同的函数,这里选择Nothing(如果选中sum求和会自动计算每个子表表中合计的合计,也就是说会把传过来的合计累加之前所有子表的合计)。点击确定,这样就可以把在子表中的合计放在主表中显示
技巧2:巧妙利用子报表设计表单
形如:下面的表单,可以看的出来,是有几个不同的表单组合而成,主要是各个表单的行数是不固定的,这就需要做成三个表单或者table组合起来。表单可以利用主子表的关系,例如第一个表单作为子表单放在表单二的columnHeader位置,而表单二Detail放表单二需要查询的内容,同样的把表单二作为子表放在表单三column Header位置,再把表单三作为子表放在主表的column Header位置这样逐级往上走,可以设计出这样的表单。当然各个报表的位置需要计算好。
参数:这个时候只要在SubReport中以主传给子表的顺序设计参数即可,如下图是表单三向表单二传。
以下是各个主子表的设计,需要注意的是他们位置的调整。
在iReport中是有table的控件的,这里写的table类型的表单主要是在不用table控件的情况下,运用iReport制作出table的样式。以押金报表为例。
1.设计报表样式布局,然后选中所有添加边框的列,右击选择Padding and Borders 设计自己需要的格式,例如Line width 选择1 选择实线。就可以啦,当然可以根据需要设计边框上下左右的线的样式。这样就设计好了类型为table的报表。
2. 另外一种设计就是在属性面板中是利用控件的属性来设置。形如图。
3.可以严格分出table_ch、table_th、table_td、table的样式(显示不同的颜色)。选择不同的行,在属性style中修改属性值(默认属性是空)如下图二、三。不过这个属性存在一个问题 ,比如在上面的押金表中个利用这个是属性就不行会提示如图四的提示。是什么原因,暂时没有解决,所以,如果style属性不能使用的话,建议用第一种方式来设计表格。
(注:以上就是利用iReport做报表的用法报表之间参数的传递)
2.4.1.Dorado7 中如何使用iReport打印报表
u 在服务器端安装swftools-0.9.1.exe转换工具
在war包的bdf.properties中配置bdf.report.pdfToSwf变量值,如:bdf.report.pdfToSwf=D:/Program Files/SWFTools/pdf2swf.exe
报表开发时注意添加一个parameter:CUSTOM_DATASOURCE,值为空,这样框架会自动使用默认的数据源。
u jasper文件通过报表模板维护界面添加;(针对此项目,由于维护界面的问题,添加保存后还需要通过sqldeveloper直接在数据库中设置bdf_reports其datasource_name=WY)
u 在业务界面上通过如下代码打开报表:
view的packages设置为:jasperreports,swfviewer
js报表调用代码:
var report = new bdf.JasperReports();
report.showReport("checkin",{p1:"value1",p2:"value2"});
其中第一个参数对应为报表模板中添加报表的名称。
第二个参数json对象为需要传入报表的参数定义;
2.4.2. Dorado7中iReport 预览问题
预览时中文汉字不能显示。安装xpdf-chinese-simplified语言包
步骤:
2.1.在war包的bdf.properties中配置bdf.report.pdfToSwf变量值,如:
bdf.report.xpdfPath=D:/ProgramFiles/xpdf-chinese-simplifie
2.2.依次选中可能出现汉字的文本框,进行如下设置
fontname:宋体
PDFfont name: STSong-Light;
pdfEncoding=UniGB-UCS2-H
PdfEmbedded:打钩选择(可有可无)
2.4.3. Dorado7中 Grid导出报表
将dorado7中的DataGrid以及AutoForm控件中的数据导出成报表(支持PDF和Excel两种格式),同时可以利用BDF报表模块的swf报表浏览器,在线浏览产生报表文件,供用户在线浏览和下载使用。
u 同样首先安装swftool工具
u view的packages设置为:jasperreports,swfviewer
u 在业务界面上通过如下代码调用即可。
var report = new bdf.Report();
report.showGridReportDialog(this,"gridFeeBill",null,true,
true,true);
· 第一个参数:表示当前的view对象;
· 第二个参数:表示要导出报表的DataGrid的id;
· 第三个参数:导出报表的初始化参数;
· 第四个参数:是否显示在线预览按钮;
· 第五个参数:是否显示直接导出PDF按钮;
· 第六个参数:是否显示直接导出Excel按钮;
u 在执行js之后,可以根据自己的需要设计报表的样式和标题。
(关于dorado7中Grid和Form的报表导出,在BSDN中有详细说明
http://wiki.bsdn.org/pages/viewpage.action?pageId=3964933)
转自 http://blog.csdn.net/q326527970/article/details/7049047iReport 4.1 报表制作,子报表,实例解析