iReport报表、⼦报表、主从报表、合计、实例解析
最近在开发web报表打印,采⽤了ireport5.5.1,⽹上资料很有限,这篇⽂章也算得上是精华之⼀,收录下来,⽅便⾃⼰,也⽅便别⼈使⽤。
---------------------------------------------------------------------------------------------------------------------------------------------------------
开发使⽤步骤(iReport 4.1.1)
和iReport的介绍
⽹上有这个软件的详细介绍。可以搜索下,进⼀步了解。这⾥只是简略介绍。
简介
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中的⼀款免费软件,其主要作⽤是⽤来以可视化的⽅式设计⽣成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:显⽰在所在页⾯的最下端,即页脚。放置页级别的统计值或是页的说明。
2数据库连接的建⽴ DataSource
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的基本功能,步骤相对详细,下⾯的报表主要显⽰⼀些技巧,重复的步骤不再截图)
⼦报表SubReport(例:批量打印报表)
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做报表的⽤法报表之间参数的传递)
中iReport的配置
2.4.1.Dorado7 中如何使⽤iReport打印报表
u    在服务器端安装swftools-0.转换⼯具
在war包的bdf.properties中配置port.pdfToSwf变量值,如:port.pdfToSwf=D:/Program Files/
报表开发时注意添加⼀个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中配置port.pdfToSwf变量值,如:
2.2.依次选中可能出现汉字的⽂本框,进⾏如下设置
fontname:宋体
PDFfont name: STSong-Light;
pdfEncoding=UniGB-UCS2-H
安卓在线解析jsonPdfEmbedded:打钩选择(可有可⽆)
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中有详细说明

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。