




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JasperReport和IReport报表开发的功能介绍目录1 简介42 JasperReport和IReport的安装与配置42.1 JDK的下载、安装和配置42.2 ANT的下载、安装和配置52.3 Jasperreport的下载、安装和配置62.4 iReport的安装和配置73 主要功能和实现过程73.1 XML解析83.2编译报表设计83.3 Report Design 预览93.4报表填充103.5查看报表113.6打印报表113.7导出报表113.8对象的载入和保存114 iReport的使用指南124.1一个简单的报表124.2报表预览134.3使用数据库的数据生成报表155
2、 报表设计185.1DTD Reference185.2XML编码195.3报表属性196 报表数据216.1表达式216.2参数226.3数据源246.4查询报表256.5字段266.6变量287 Report Sections317.1 Main Report Sections317.2 数据分组368 脚本程序389 报表元素389.1文本元素409.2图像元素459.3超链接489.4元素组4810 子报表4910.1子报表参数5010.2子报表数据源5011高级JasperReports应用5011.1 XML报表的导入和设计5011.2实例化数据源接口5011.3自定义查看器501
3、1.4导出新的格式511 简介Jasperreport是一款报表打印组件,是开放源代码组织中的一个java报表打印工程,是一款功能强大的报表生成工具。它既可以将报表内容在显示器上输出,也可以通过打印机打印出来,同时它还支持使用PDF、HTML和XML等多种文件格式进行存储。在不久的将来,诸如CSV、XLS、RTF等格式也将会被兼容。iReport也是开源组织中的一款免费软件,其主要作用是用来以可视化的方式设计生成JasperReport所使用的报表格式文件,因为JasperReport本身并未提供很好的可视化报表设计工具,iReport的出现正好弥补了这个缺陷。2 JasperReport和I
4、Report的安装与配置 2.1 JDK的下载、安装和配置下载JDK的最新版本可以从SUN 公的官方网站上下载得到,网址为 ,JDK共分为3 个版本,J2ME,J2SE,J2EE,因为是在计算机上使用,我们需要下载使用 J2SE SDK,如果您的计算机是用来做软件开发,需要下载J2SE SDK,如果是用来运行已经编译好的JAVA 程序的,可以只下载J2SE JRE 即可。下载JDK 时SUN 公司会要求你同意一个JDK 的使用许可协议,选接受协议后,会出现选择适合不同的操作系统平台使用的JDK 版本选择的界面,您可以根据自己使用的操作系统平台选择适合的JDK 版本。安装以Windows 平台的
5、安装为例,在安装的过程中一路Next 即可,同时请注意记录下JDK安装后的目录,稍后进行配置时要用到。配置以在Windows xp平台配置J2SE SDK 为例,鼠标右键点击桌面上的“我的电脑”图标,在弹出的菜单中选择属性,选择“高级”选项,选择“环境变量”。点击“系统变量”下的新增按钮,在对话框中的变量名处输入大写的JAVA_HOME,在变量值处输入的JDK 安装目录。点击“确定”完成第一步的配置,接下来以同样的方法配置系统环境变量CLASSPATH,在CLASSPATH的变量值处输入%JAVA_HOME%libtools.jar; %JAVA_HOME%libdt.jar,当然,也可以直接
6、输入绝对路径,但建议使用%JAVA_HOME%的方式。再接下来还要修改系统环境变量PATH,增加%JAVA_HOME%bin 目录。至此JDK 的配置也完成.打开一个命令行窗口,键入set classpath 与set java_home 应该可以看到正确的配置信息,同时,输入javac -version 看系统能否找到JAVA 的编译器。 2.2 ANT的下载、安装和配置ant 是个很好用的工具,虽然对于JasperReport 和iReport 来说ant 并不是必须的,但还是建议以使用ant 的方式来应用。ANT的下载和安装ant 是apache 组织的一个子项目,可以从http:/an
7、 下载得到,Windows 平台的可以下载ZIP 格式的安装文件,下载完成以后解压缩到某个目录,建议使用根目录下的直接子目录作为ant 解压缩以后目录,ant 无需安装,解压缩文件以后就算安装完成。Ant的配置与设置JDK相同的操作过程打开系统环境变量设置窗口,增加ANT_HOME环境变量,变量值为解压缩以后的ant 所在目录在系统的环境变量Path 中增加%ANT_HOME%bin 目录新开一个命令行窗口,输入ant 后如果出现如下图所示内容即算正确完成ant 的配置。 2.3 Jasperreport的下载、安装和配置Jasperreport的下载和安装因为Jasp
8、erReport 是 的开源项目,最新的JasperReport 版本可以在 中找到,同时,为了方便世界各国程序员下载, 还设有许多的镜像站点供你选择。强烈建议下载jasperreport 的source.zip,因为这里面包含了很多的示例程序,对于想深入研究jasperreport 的人来说会有很大的帮助。如果不想对JasperReport 有太多的深入了解,只需要下载.jar 文件就能正常开发应用了。没有必要单独为JasperReport.jar 文件设置目录,建议放在系统中%JAVA_HOME%lib目录中。Jasperreport的配置将JasperReport-x.x.x.jar 文
9、件添加到操作系统的环境变量ClASSPATH 中即可完成JasperReport 的配置。 2.4 iReport的安装和配置iReport的安装iReport 在Windows 平台也是以.zip 形式的文件提供的,直接解压缩后就算完成了安装如果是2.x版的,且您决定以ant 的方式运行iReport 程序,需要修改一下iReport 目录中的ireport.bat 文件中的内容,第一次运行ireport.bat 会生成javadoc,在确定已正确生成javadoc 文件后可以将生成doc 的那一段注释掉以便以后可以快速的启动iReport 程序。3.0 版无需修改ireport.bat 文
10、件。iReport 的使用在有ant 环境的下运行iReport,直接运行iReport 目录中的ireport.exe 即可。在没有ant 的环境下运行iReport,2.X 版本使用iReport 目录中的noant 目录中的startup.bat 运行,3.0 版本使用bin 目录中的startup.bat 运行。3 主要功能和实现过程 现在我们将对XML报表设计进行分析,编译,装填数据,预览结果和导出到其他格式的过程。Jasperreport的实例下面是Jasperreport工具,将XML报表转变成的各种类型报表的流程图: 3.1 XML解析
11、60; JasperReport使用SAX2.0 API对XML文件进行解析。然而,这并不是必须的,用于可以在执行其自行决定使用哪一种XML解析器。JasperReport使用org.xml.sax.helpers.XMLReaderFactory类的createXMLReader()来获得解析器实例。在这种情况下,就像在SAX2.0文档中说的那样,在运行期,把Java系统属性org.xml.sax.driver的值设定为SAX driver类的全限定名是必要的。设置系统属性有两种方法:第一种方法是在你启动Java虚拟机的时候,在命令行窗口使用-D开关:java -Do
12、rg.xml.sax.driver=org.apache.xerces.parsers.SAXParser MySAXApp sample.xml在JasperReport提供的所有例子中,都采用ANT构建工具来执行不同的任务。我们通过使用内置的 task中的元素来提供这一系统属性;第二种设置系统属性的方法是使用java.lang.System.setProperty(String key, String value)System.setProperty(“”,“”);Jsp/compile.jsp和web-inf/class/servlets/CompileServlet.java文件提供了
13、这方面的例子。 3.2 编译报表设计 为了生成一个报表,用户首先需要完成报表的设计,生成方法或采用直接编辑XML文件,或通过程序生成一个net.sf.jasper.engine.design.JasperDesign对象。在此,主要采用编辑XML文件的方法,因为这种方法在目前是使用JasperReport类库的最好的方法。 XML报表设计是JasperReport用来生成报表的初级材料。这是因为XML中的内容需要被编译并载入到JasperDesign对象中,这些对象将在报表引擎向其中填入数据之前,必须经过编译过程。
14、0; 报表编译过程的主要目的是生成并装载含有所有报表表达式的类的字节码。这个动态生成的类将会被用来在装填数据,并在给所有报表表达式求值的时候使用。具体例子是,如果你用iReport生成一个报表名字叫SimpleSheetTest,它的XML设计文件名叫SimpleSheetTest.jrxml,同时和它在同一目录下iReport会自动生成一个文件名为SimpleSheetTest.java,里面主要是一些报表元素,如Field,Parameters,Variables的定义,以及一些求值表达式。当然,像上面提到的,这个文件在你直接使用JasperReport API的时
15、候是看不到的,因为它是在执行期生成的一个Class。要想看到它的办法是:在IDE(JBuilder,Eclipse)中单步执行程序,在报表打印的阶段,你将能跟踪到这个类,它的名字就是“你的报表名.java”,按上面的例子就是SimpleSheetTest.java,这和iReport是一致的。当然也可以像下面说的那样,到生成这个类的临时目录里找到它。在这个类生成过程之前,JasperReport引擎需要验证报表设计的一致性,哪怕存在一处验证检查失败都不会继续运行下面的工作。对于这个包含了所有报表表达式的类的字节码,我们至少需要关心三个方面的内容:临时工作目录、Java 编译器的使用、Class
16、path 为了能够编译Java源文件,这个文件必须被创建并且被保存到磁盘上。Java编译过程的输出是一个.class文件,这个包含所有报表表达式的类在这个工作目录里被创建并编译,这也是为什么JasperReport需要访问这个临时目录的原因。当报表的编译过程结束之后,这些临时的类文件将被自动删除,而生成的字节码将保存在net.sf.jasper.engine.JasperReport对象中。如果需要的话,这个类可以将自己序列化并保存到磁盘上。这就是iReport的做法。 缺省情况下,这个临时工作目录就是启动JVM时的当前目录,这却取
17、决于JVM的系统属性user.dir。通过更改系统属性pile.temp,用户可以很容易更改这个工作目录。在Web环境下,特别是当你不想让含有启动Web Server的批处理文件的目录和报表编译过程的临时工作目录混在一起的时候,修改这个属性就可以了。上面提到的第二个方面涉及用来编译报表表达式类的Java编译器。首先,报表引擎将试图使用sun.tools.javac.Main类来编译Java源文件。这个类包含在tools.jar中,当且仅当这个jar文件在JDK安装目录下的bin/目录中,或在classpath中时,sun.tools.javac.Main才能正常使用。如果JasperRepor
18、t不能成功装载sun.tools.javac.Main文件,程序将动态执行java编译过程,就像我们通常用命令行那样,使用JDK安装目录下的bin/目录下的javac.exe。这就是为什么将JDK安装目录/lib/下的tools.jar文件copy到JasperReport工程的lib/目录下是一个可选的操作(optional operation)。如果tools.jar不在classpath中,JasperReport将显示错误信息并继续上面提到的操作。 当编译Java源文件的时候,最重要的事情莫过于classpath。如果Java编译器不能在指定的classpath中找到它试图
19、编译的所有相关类的源文件,则整个过程将失败并停止,错误信息将在控制台显示出来。同样的事情也将发生在JasperReport试图编译报表表达式类的时候。所以,在runtime为编译过程提供正确的classpath是非常重要的。例如,我们我们需要确认在classpath中,我们提供了在报表表达式中可能用到的类(custom class)。 在这个方面也有一个缺省的行为。如果没有为编译report class特殊指定classpath,引擎将会使用系统属性java.class.path的值来确定当前的JVM classpath。如果你指定了系统属性pile.cla
20、ss.path的值,你可以用你定义的classpath来覆盖缺省行为。 大多数情况下,编译一个report只需要简单的调用JasperReport类库中的JasperCompileMpileReport(myXmlFileName);即可。调用之后将生成编译好的report design并存储在.jasper文件中,这个文件将会保存在和提供XML report design文件相同的目录中。 3.3 Report Design 预览 JasperReport类库并没有提供高级的GUI工具来辅助进行设计工作。但是目前已经
21、有至少4个project试图提供这样的工具。然而,JasperReport本身提供了一个很有用的可视化组件来帮助报表设计者在编译的时候预览报表设计(其实不如直接用IReport方便)。net.sf.jasper.view.JasperDesigner是一个基于Swing的Java应用程序,它可以载入并显示XML形式或编译后的报表设计。尽管它不是一个复杂的GUI应用程序,缺乏像拖拽可视化报表元素这样的高级功能,但是它仍然是一个有用的工具。所有JasperReport工程提供的例子都利用了这个报表查看器。 如果你已经安装了ANT,想要查看一个简单
22、的报表设计,你只需要到相应的文件夹下输入如下命令:ant viewDesignXML 或者 ant viewDesign 如果你没安装ANT,要达到上面的效果就不是很容易,因为JasperReport本身需要一些其他辅助的jar包(在JasperReport安装目录/lib下),在运行的时候,你需要把这些jar包都包含到你的classpath里面,并且正确设计系统属性,如上面提到的org.xml.sax.driver。我可以展示一下在windows下的例子:>java -classpath ./;./././lib/commons-di
23、gester.jar;./././lib/commons-beanutils.jar;./././lib/commons-collections.jar;./././lib/xerces.jar;./././lib/jasperreports.jardori.jasper.view.JasperDesignViewer -XML -FFirstJasper.xml 3.4报表填充 报表填充过程是JasperReport library最重要的功能。它体现了这个软件最主要的目的,因为这一过程可以自由的操作数据集,以便可以产生高质量的文档。有3种材
24、料需要装填过程中作为输入提供给JasperReport:report design、参数、数据源 这一过程的输出通常是一个单一的最终要被查看,打印或导出到其他格式的文档。要进行这一过程,我们需要采用net.sf.jasper.engine.JasperFillManager类。这个类提供了一些方法来让我们填充报表设计,report design的来源可以是本地磁盘,输入流,或者直接就是一个已存在于内存中的net.sf.jasper.engine.JasperReport类。输出的产生是于输入类型相对应的,也就是说,如果JasperFillMan
25、ager接到一个report design的文件名,填充结束后生成的report将会是一个放在磁盘上的文件;如果JasperFillManager收到的是一个输入流,则生成的report将会被写到一个输出流中。有些时候,这些JasperFillManager提供的方法不能满足某些特定的应用的要求,例如可能有人希望他的report design被作为从classpath中得到的资源,并且输出的报表作为一个文件存放在一个指定的磁盘目录下。遇到这种情况时,开发人员需要考虑在将报表设计传递给报表装填过程之前,用net.sf.jasper.engine.util.JRLoader类来装载report d
26、esign对象。这样,他们就能获得像报表名这样的report design属性,于是开发者就能生成最终文档的名字,并将它存放到所需的位置上。 在现实中,有许多报表装填的情境,而装填管理器仅试图覆盖其中最常被使用到的部分。然而对于想要自己定制装填过程的人来说,只要采用上面所说的方法,任何开发者都可以达到满意的结果。报表参数通常作为java.util.Map的value提供给装填管理器,参数名为其键值。作为装填过程所需的第三种数据源,有如下两种情况:通常,引擎需要处理net.sf.jasper.engine.JRDataSource接口的一个实例,
27、通过这个实例,引擎可以在装填过程中获取所需数据。JasperFillManager提供的方法支持所有的JRDataSource对象。 然而,这个管理器还提供一些接受java.sql.Connection对象作为参数的方法集,来取代所需的数据源对象。这是因为在很多情况下,报表生成所需的数据都来源于某个关系型数据库中的表。在报表中,用户可以提供SQL查询语句来从数据库中取回报表数据。在执行期,engine唯一需要做的是获得JDBC connection对象,并使用它来连接想要连接的数据库,执行SQL查询并取回报表数据。在后台,引擎将使用一个特殊的J
28、RDataSource对象,但是它对于调用它的程序来说是透明的。JasperReport工程提供了相关的例子,它们采用HSQL数据库服务器(在工程文件中,有一个相应的文件夹),要运行这些例子你需要首先启动该服务器,方法是:在/demo/hsqldb目录下输入如下命令:>ant 或者 >ant runServer一下代码片断显示了query例子是如何装填数据的:/Preparing parametersMap parameters = new HashMap();parameters.put("ReportTitle", "Address Report&
29、quot;);parameters.put("FilterClause", "'Boston', 'Chicago', 'Oslo'");parameters.put("OrderClause", "City");/Invoking the filling processJasperFillManager.fillReportToFile(fileName, parameters, getConnection(); 3.5 查看报表
30、; 报表填充阶段的输出通常是一个JasperPrint对象,如果把它保存在磁盘上,通常以一个.jrprint文件的形式存在。JasperReport拥有一个内置的查看器,用来查看用内置的XML导出器获得的XML格式的报表文件。这个查看器就是以前提到过的net.sf.jasper.niew.JRViewer,用户可以通过继承这个类来定制自己所需的查看器。JasperReport工程中自带的例子webapp中,你可以阅读JRViewerPlus类的代码来获取进一步内容。 3.6 打印报表 JasperReport类库的主要目标,就是生成
31、可打印的文档。而且多数应用程序生成的报表都是需要打印到纸张上。我们可以用net.sf.jasper.engine.JasperPrintManager来打印JasperReport生成的文档。当然,报表也同样可以在被导出到其他格式如PDF,HTML之后再被打印。通过JasperPrintManager提供的方法,我们可以打印整个文档,打印单个文档或打印某一范围内的文档,可以显示打印对话框也可以不显示。下面的例子演示了不显示对话框,打印整个文档的方法:JasperPrintManager.printReport(myReport,false); 3.7 导出报表
32、0; 在一些应用程序环境下,将JasperReport生成的文档从其特有的格式导出到其他更为流行的格式如PDF,HTML是非常有用的。这样一来,其他人就可以在没有安装JasperReport的情况下查看这些报表,特别是当这些文档要通过网络发送出去的时候。JasperReport提供了JasperExportManager类来支持此项功能。这项功能将会在以后不断加入对新的格式的支持。目前,JasperReport主要支持导出PDF,HTML和XML类型的文档,下面是导出的代码片断:JasperExportManager.exortReportToHtmlFile(myReport);
33、 注意:想要将自己的报表导出到其他格式的用户,需要实现JRExporter的接口,或继承相应的JRAbstractExporter类。 3.8 对象的载入和保存 当使用JasperReport的时候,你经常会与序列化的对象,如以编译的报表设计,或已生成的报表打交道。有时,你需要手动载入从不同的source如input stream或你用类库核心功能产生的序列化类。JasperReport提供了两个特殊的工具类来提供上述操作的能力,这些类通常供报表引擎自己使用:
34、0; 第一个类提供了一些方法让我们能够从不同类型的数据源如文件,URL,input stream和classpath里面获取序列化对象。最令人感兴趣的方法是loadObjectFormLocation(String)。它已经在上一章中介绍过了,这里不再赘述。 与上面的对象载入工具相反的部分是JRSaver类,它可以帮助程序员将自己的类序列化之后存放到本地磁盘或通过Output Stream发送到网络上去。 有时,开发人员可能想要载入已经生成好的report,或最终的已经被导出到XM
35、L格式的JasperReport文档,这与上面所说的直接load序列化对象有所不同。这时,我们需要载入的是将载入的XML内容进行编译,并生成JasperPrint对象,而并非仅仅是载入序列化对象。这时,我们可以通过net.sf.jasper.engine.xml.JRPrintXmlLoader类的一些静态方法,通过编译从XML文件中读取的内容构建出一个位于内存中的文档对象。4 iReport的使用指南4.1一个简单的报表如上面左图所示新建一个文档,如右图设置报表的名称、大小等属性。依照上图的标识,分别设计报表的各部分,可以通过以下快捷方式来插入图形、静态文字、动态文字图片等元素,设计如下图报
36、表设计完毕,选择菜单栏中的“建立”下拉菜单,选择其中“编译”,对报表尽进行编译,如有错误,会在底端提示,若无错误,则生成.Jrxml文件。编译成功之后,选择“执行报表”,进行预览。4.2 报表预览Ireport默认是用其自带的iReport JasperViewer进行预览。我们可以选择其他的预览方式,通过选择菜单栏中的“Option”下拉菜单,选择其中的“选项”,选择External Programs选项卡,如下图所示,对各个预览工具进行配置配置之后,可以通过选择菜单栏中的“建立”下拉菜单,选择以配置好的预览方式,之后选择“执行报表”,就可以用相应的应用程序对其进行预览。4.3 使用数据库的
37、数据生成报表连接数据库选择菜单栏中的“data”下拉菜单,选择“连结/资料来源”, 选择“New”新建一个连接,配置如下图,其中experiment是已建立的数据库名称单击“Test”,测试数据库连接是否成功,若成功,有以下对话框若不成功,有类似于下图的相应的对话框测试成功,单击“save”保存新建连接。设置SQL查询语句选择菜单栏中的“data”下拉菜单,选择“报表查询”,之后在相应地方编写SQL语句。编写完毕,单击“OK”保存并退出编写。字段在报表设计器中的使用点击工具栏中的在报表中的“Details”段中用鼠标拖拽到适合的大小,右击该字段框,选择属性,在选择Text Fiel选项卡,如下
38、图:选中Text Field 项,如果没有设置正确的字段名称,则Textfield expression 中的内容将显示蓝色,手工修改Textfield expression 中的内容为正确的字段名称,格式为$F字段名称,正确修改后将变为绿色显示。编译与预览带有字段的报表对下面报表进行编译,其中数据已经在数据库中预先设好编译报表可以选择菜单栏中“建立”下拉菜单中的“编译”,也可以直接点击工具栏中的图标,如果编译过程正确完成,iReport 设计器的下面会显示如下内容:带有字段的报表进行预览有两种方式,一种是不使用数据库中的数据,默认所有字段值为null 的方式,预览方法为选择“建立”菜单中的“
39、执行报表”,也可以直接点击工具栏中的图标;第二种方式为使用数据库中的数据的方式,预览方法为选择“建立”菜单中的“执行报表(使用动态连接)”,也可以直接点击工具栏中的图标。下图进行预览:5 报表设计报表设计体现了一个模板,JasperReport引擎利用这个模板将同台生成的内容传递给打印机,屏幕或Web。存储在数据库中的数据在报表装填的过程中被组织起来,根据已有的报表设计来获得可以进行打印的,面向页面的(page oriented)文档。总而言之,一个报表设计包含了所有的结构相关信息和将数据提供给报表所涉及的各个方面。这些信息涉及将在文档中显示出来的各种text或图像元素的位置和内容,自定义计算
40、(custom calculation),数据组织,报表生成时的数据操作,等等。报表设计通常都定义在一个拥有特殊格式的XML文档中,并且在被填充数据之前要经历JasperReport的编译过程。然而JasperReport也允许用户通过JasperReport提供的API构造in-memory报表对象,例如noxmldesign就是很好的例子。 5.1 DTD Reference 当使用XML文件进行报表设计的时候,JasperReport将使用内置的DTD文件来验证其受到的XML内容的有效性。如果XML验证通过,则说明所提供的报表设计符合JasperRep
41、ort所需要的XML结构和语法规则,其引擎能够生成经过编译的report design。 有效的XML文档总是在验证时指向JasperReport的内部DTD文件。如果没有提供DTD文档的引用,报表的编译过程将会突然结束。这对所有人来说都是一个负担,因为DTD引用通常是相同的,并且这些引用可能会简单的被从以前的报表设计中copy过来。在一开始,你需要将这个引用从给定的例子中copy过来。 正如以前说的一样,报表引擎仅能识别指向其内部DTD文件的的引用。你不能随便从类库的源文件中将那些DTD文件copy到别的地方,再在你的报
42、表设计文件中指向你copy的那些DTD文件。如果你想那样做的话,你将需要调整类库中某些类,包括dori.jasper.engine.xml.JRXmlDigester类的某些代码。如果你遇到像引擎无法找到其内部的DTD文件而导致的无法载入资源的问题,请确定你已经在使用外部DTD文件之前排除了所有可能发生的情况。遇到这样的问题是不太可能的,因为资源载入机制会随着时间不断改进。JasperReport只有两种合法的XML报表设计的DTD引用,他们是:<!DOCTYPE jasperReport PUBLIC "-/JasperReports/DTD Report Design/EN
43、""或者:<!DOCTYPE jasperReport PUBLIC "-/JasperReports/DTD Report Design/EN"" XML报表设计的根元素是<jasperReport>,下面是一个普通的JasperReports XML报表设计文件的样子:<?xml version="1.0"?> <!DOCTYPE jasperReport PUBLIC "-/JasperReports/DTD Report Design
44、/EN"" <jasperReport name="name_of_the_report" . > . </jasperReports>前三点描述了该报表设计的属性和设置,下面省略的部分则描述了各种报表设计要素如报表参数、字段、变量、组和报表栏等。5.2 XML 编码 当要生成不同语言的XML报表设计的时候,在XMl文件的首部的编码属性需要特别关注一下。缺省情况下,如果这个属性的值没被订制,则XML解析器将会使用“UTF-8”作为XML文件的编码格式。这一点是非常重要的,因为报表设计通常包含了静
45、态的本地化文本。对于大多数西欧语言来说,ISO-8859-1编码,也就是我们常说的LATIN1将会很好的处理如法语中重音符号的显示问题。 在编辑XML文件的时候,要找到某种特殊语言的编码类型,你可以查看XML document.FIXME。 5.3 报表属性 我们上面已经看到,<jasperReport>XML报表设计的根元素。这一节我们将介绍报表设计对象的Property的细节以及这些属性所对应的XML attributes报表名称 每一个报表都必须有一个名称。这个名称是相当重要的,因为类库需要它来生成文件,
46、尤其是当编译,装填,导出报表的默认行为被使用的时候,这个名的作用更为重要。这个名称是以<jasperReport>元素的name attribute的形式提供的,并且是强制必须填写。列数 JasperReport允许生成每页的列数超过一列的报表,正如下面的图片,展示了拥有两列的报表:默认情况下,报表引擎生成每页一列的报表。打印顺序 对于拥有超过一列的报表,为其提供列将被以什么顺序填充是很重要的。你可以使用<jasperReport>元素的printOrder attribute来进行
47、设置。有如下两种情况:l Verticaln Filling:这个选项将导致列是自顶向下被填充(printOrder=”Vertical”)l Horizontal filling:列将自左向右被填充(printOrder=”Horizontal”)缺省设置将是printOrder=Vertical页面大小 有两个attribute是用来提供要生成的文档大小的:pageWith,pageHeight。像所有其他显示元素位置和尺寸的attribute一样,这两个attribute是以像素为单位的。JasperReport采用Java默认的每英寸72点的设置。这
48、意味着pageWith=”595”将大约是8.26英寸,这大概是A4纸的尺寸。默认的纸张大小是A4纸:pageWith=”595” pageHeight=”842” Page Orientation(默认设置为Portrait) orientation属性用来设置文档打印格式是“Portrait”还是“Landscape”。JasperReport允许用户在从“Portrait”切换到“Landscape”的时候调整液面的宽度和高度。我们先看一个例子:我们假定要生成一个A4纸的报表,采用“Protrait”格式: pageWidth
49、=”595” pageHeight=”842” orientation=”Portrait” 如果我们决定用A4纸的“Landscape”布局,首先要调整相应的页面宽度和高度: pageWidth=”842” pageHeight=”595” orientation=”Landscape” 这是因为JasperReport需要确切知道它所要绘制的报表页的宽度和高度,而不只看我们提供的orientation属性,至少在报表装填的时候是这样。orientation属性仅在报表打印时有用,来通知打印机或某
50、些exporters页面的orientation设置。页边距 一旦页面大小确定下来,用户就可以在生成报表的时候设定报表的边距。有四个属性来完成这项工作:topMargin,LeftMargin,bottomMargin和rightMargin。缺省的设置是上下边距20像素,左右边距30像素。列宽和列间距(Column Size and Spacing) 一个报表可能含有多列,我们可以通过上面提到的columnCount属性得到报表列数。JasperReport需要知道列的宽度和列间距的大小。有两个属性用于这项工作:colu
51、mnWidth和columnSpacing。当我们对报表设计进行编译的时候,编译器会对这项设置进行有效性检查(validation check)-看列的宽度和列间距是否符合给定的页面宽度和页边距。因为缺省的列数为一,所以缺省的列间距为0像素,并且缺省的列宽等于页面宽度减去左右边距所得的值。在上面A4的例子中,列宽即为555像素。空数据源时的行为 有时我们提供给我们的报表的数据源可能会没有任何记录。whenNoDataType属性可以让你选择当所提供的数据源中没有数据的时候入和察看生成的报表。如下有三种不同的可能性,你可以任选其一:l Empty Docume
52、nt:生成的报表不含有页面(no page in it)。当你试图装载这样的文档(whenNoDataType=”NoPages”)的时候,Viewer 可能会抛出一个错误。l Blank page:表示生成的报表将仅含有一个空白页(whenNoDataType=”BlankPage”)l All sections displayed:除了detail部分的其他部分将在生成的文档中显示出来(whenNoDataType=”AllSectionNoDetail”)。缺省的设置是whenNoDataType=”NoPages”。 标题和摘要的放置(Title and Summary Section
53、s Placement) 如果你想让title部分和summary部分在单独的一页里显示,你所需要做的事情就是让下面的一个或两个属性的值为“true”:isTitleNewPage,isSummaryNewPage。这两个属性缺省情况下为false。注意:即使你选择了在最后一页的剩余部分显示summary,如果列数超过一列,并且第二列已经在最后一页出现的时候(没试过,等有机会试验一下),新的一页将会被自动生成。脚本类(Scriptlet Class) scirptletClass属性用于设置
54、用于当前报表的scriptlet类的名字。在后面会对Scriptlet进行详细讨论。如果你没为这个属性提供任何值,报表引擎将会使用dori.jasper.engine.JRDefaultScriptlet的实例。6 报表数据 当谈到报表装填过程的时候,有三样东西需要作为输入提供给报表引擎:报表设计(report design),参数值(parameter values)和报表的数据源(data source)。在先前的介绍,我们已经看到了有关报表设计的某些方面,现在我们要更加详细的关注其他两方面的内容:参数(parameter)和报表数据源。他们描绘了报表引
55、擎在装填报表过程中所用到的仅有的数据来源。像你用其他报表工具所希望的一样,这些数据将会根据报表设计中的定义的模板(template)被组织起来,并被用来生成准备打印的、面向页面的文档。 6.1 表达式(expressions) 表达式是JasperReports的一个非常有用的特性。他们可以用来声明执行各种执行各种计算(calculations)的报表变量(report variables),进行报表的数据组织,定制报表文本字段(text field)的内容或者进一步定制报表对象的appearance。所有报表表达式基本上都是Java表达式,他们可以以特殊的
56、语法引用报表参数(parameter),报表字段(field)和报表变量(variable)。在XML报表设计中,有一些用于定义表达式的元素:<variableExpression>, <initialValueExpression>,<groupExpression>,<printWhenExpression>,<imageExpression>, <textFieldExpression>等。因为所有的JasperReport表达式都是真正(real)的Java表达式,只要你用完整的类名(包括包名)来引用这些表达式,你
57、就可以在任何class中使用他们。当你编译报表和装填数据的时候,你应该确定你在报表表达式中使用的类已经写入了classpath。报表参数引用是通过$P序列引入的,例如:<textFieldExpression> $PReportTitle</textFieldExpression> 这个例子假定我们在报表设计中有一个名为ReportTitle的报表参数,这个参数是一个java.lang.String类。当报表进行装填的时候,文本字段将会显示这个参数的值。为了在一个表达式中使用报表字段,字段名必须放在$F的括号中。例如,如果我们想要在一
58、个文本字段中显示两个数据源字段的连接值(concatenated values),我们可以定义如下表达式:<textFieldExpression> $FFirstName + " " + $FLastName</textFieldExpression>表达式可以更加复杂:<textFieldExpression> $FFirstName + " " + $FLastName + " was hired on " + (new SimpleDateFormat("MM/dd/yyyy&qu
59、ot;).format($FHireDate) + "."</textFieldExpression> 正如你所看到的一样,参数、字段和变量引用都是通过用JasperReport的特殊语法从一个真正地Java对象中引入的。(实际上是一个JREvaluator对象,该对象是在运行其生成的动态对象,并不能在本地磁盘上见到它的身影,不过如果你使用iReport的话,你就可以在生成报表文件的同一目录下看到它的本来面目) 下面这个例子给我们显示了怎样从一个java.lang.String类型的报表字段中选取并显示第一个字符:<te
60、xtFieldExpression> $FFirstName.substring(0, 1)</textFieldExpression> 6.2 参数(Parameters) Parameters是传递给报表装填操作的对象引用。这些参数主要作用于把那些不能从报表数据源中获得的数据传给报表引擎。例如,我们可能要把执行报表装填过程的用户名字专递给报表引擎,如果我们想让它显示在报表上或者在我们想在报表的title上动态的改变它,我们就可以以参数的形式传给报表引擎。在一个报表设计中声明一个参数是很简单的,它只要求指定参数的名称和所属类:<p
61、arameter name="ReportTitle" class="java.lang.String"/><parameter name="MaxOrderID" class="java.lang.Integer"/><parameter name="SummaryImage" class="java.awt.Image"/>这里所提供的报表参数值可以被用到各种报表表达式中,在报表SQL查询中,甚至可以用到报表的scriptlet类里。下面是构成参数定义的全部组件(XML元素):参数名
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司间无息借款合同(3篇)
- 汽车买卖合同格式(18篇)
- 劳动合同续签意向书(4篇)
- 社区活动承包协议
- 品质苗木供应合同协议
- 商场小业主租赁合同协议
- 和私人签投资合同协议
- 售室内门合同协议
- 欠款合同偿还合同协议
- 商品经营权合同协议
- 财报分析-伊利
- 神经外科科室质量管理小组工作制度
- 山东省2024年夏季普通高中学业水平合格考试地理试题02(解析版)
- 英语四级模拟试题(附答案)
- 福建晋华的测评题库
- 干部履历表填写范本(中共中央组织部1999年)
- 水库溢洪道毕业设计
- 《中国建筑的特征》课件++2023-2024学年统编版高中语文必修下册
- 2024年中层干部选拔笔试试题卷
- 市政工程施工组织设计方案
- 2024-2030年中国汽车座椅行业市场发展分析及竞争格局与投资前景研究报告
评论
0/150
提交评论