简介(Introduction)html
Jasperreports是一个强大的开源报表工具,它可以传送丰富的内容到屏幕上、打印机或者转换为PDF、HTML、XLS、RTF、ODT、CSV、TXT和XML文件等多种格式的文件。Jasperreports彻底由Java编写,它能够被用于各类各样的Java程序来动态的生成内容。它主要的目的就是帮助以一种简单且灵活的方式生成基于页面的、可打印的文档。java
Jasperreports会整理从JRXML文件(报表设计文件,又称为报表模版文件,后缀为*.jrxml)中定义的数据源中取出的数据。为了给一个报表填充数据,报表设计文件必须首先通过编译。sql
经过JasperCompileManager类暴露的compileReport()方法来编译报表设计文件。经过编译,报表设计文件(*.jrxml)将被加载到一个报表设计(jasper-design)对象中,而后这个对象将被序列化到磁盘上(由JasperReport类完成,生成的文件为*.jasper)。这个序列化的对象将在程序须要向其填充数据的时候被使用到。事实上,编译一个*.jrxml文件意味着将要编译定义在*.jrxml文件中定义的全部Java表达式,在编译时将执行一系列的验证过程,用于检查*.jrxml文件的一致性。编译的结果是生成一个将会根据一系列数据来生成文档的“待填充(ready-to-fill)”文件(*.jasper)。shell
咱们可使用JasperFillManager类暴露的fillReportXXX()方法来填充一份“待填充”文件。这些方法接收一个jasper-design对象或者一个表明该对象的文件做为参数,同时接收一个链接数据库的用于获取填充数据的JDBC链接。方法的执行结果是生成一个可打印(ready-to-print,打印工做由JasperPrint类完成)文档(*.jrprint),它将被序列化到磁盘上待之后使用。这份文档将被传送到屏幕或者打印机,或者能够被导出为PDF、HTML、XLS、RTF、ODT、CSV、TXT或者XML文档。数据库
如上所述,使用JasperReports时用到的主要的类有:express
net.sf.jasperreports.engine.JasperCompileManagerapache
net.sf.jasperreports.engine.JasperFillManagerapi
net.sf.jasperreports.engine.JasperPrintManager数组
net.sf.jasperreports.engine.JasperExportManageride
这些类表明了JasperReports引擎的门面类,它们包含了一系列简化了访问API的静态方法,它们可用于编译一份报表设计文件、为报表填充数据、打印报表或者将结果导出到其余文档格式。
除了这些门面类之外,你还能够直接使用具体的导出类来工做。好比你须要导出你的报表为XLS、RTF、ODT、TXT或者其余文档格式,对于这些格式,在JasperExportManager类中没有相应的辅助方法,又好比在当你须要配置导出过程以使知足你特殊的需求时,也可使用这些导出类。这些导出实现类能够在JasperReports库的net.sf.jasperreports.engine.export包中找到。
若是你想在Swing应用中显示报表,你可使用和JasperReports库一块儿推出的JRViewer组件。它由一个可嵌入的并且可配置的java.swing.JPanel组件组成。JasperViewer是一个独立的Swing应用,它使用JRViewer组件以特有的格式(序列化的JasperPrint对象)或者XML格式展现报表。为了辅助报表设计工做,JasperReports还在JasperDesignerViewer类中提供了一个报表设计的预览器。
正如上面提到的,报表设计表明了一个将会被JasperReports引擎使用来生成动态内容到打印机、屏幕或者Web的模版文件。存储在数据库中的数据会被整理起来用于得到可打印的、基于页面的文档。报表设计以一种特殊的结构定义在JRXML文件中,这个结构已在JasperReports引擎提供的DTD文件中声明。而后JRXML文件被编译,由于接下来将在报表填充操做中使用到它们。
为了建立一个简单的报表设计,咱们须要以如下结构来编辑一份XML文件:
<!--?xml version="1.0"?--> <jasperreport ...="" name="name_of_the_report" xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"> ... </jasperreport>
为了更好的理解JRXML文件的结构,或者一份报表设计的流程,咱们推荐你看看快速引用(原连接已失效)。
一份报表设计文件是以一个具备jasperreport.dtd文件定义的结构的JRXML文件或者是一个存在于内存中的JasperDesign对象的方式呈现。为了根据这样的报表设计文件生成报表,这个对象或文件须要被编译。这个编译过程能够经过使用JasperCompileManager类的compileReportXXX()方法完成,其结果是生成一个*.jasper文件或者一个JasperReport对象。
编译一个报表设计文件时,引擎首先会执行一步验证来确保设计文件的一致性,而后
转换全部报表中的表达式为一个待赋值的形式,而且将它们存储在编译后的JasperReport文件或者*.jasper文件中。
这个转换要么是跟报表模版相关的Java类的快速编译过程,要么是生成将要在报表填充阶段计算表达式值时使用的Groovy或者BeanShell脚本,这取决于报表中指定的表达式的语言(详见报表模版文件的language属性)。
在更深刻了解报表编译以前,你应该经过阅读如下常见问题来了解何时你须要编译模版文件,以及怎样才能以最好的方式编译它们:
什么状况下我应该编译个人模版文件?怎样编译?(原连接已失效)
为了让模版文件编译过程尽量的灵活,咱们将用到一个特殊的叫作JRCompiler的接口。正如上面看到的,在这个库中有多个不一样类型的类实现了这个接口:
1. Java报表编译器。这个编译器生成并编译一个包含计算表达式值的方法的Java类。
2. Groovy报表编译器。它生成一个脚本用于在运行时计算表达式的值。
3. BeanShell报表编译器。它也生成一个脚本用于运行时计算表达式的值。
关于更多报表编译的信息,请查看The Definitive Guide to JasperReports。
用Ant任务来编译报表模版文件
既然模版文件的编译过程更像是一个设计时的工做而不是运行时的工做,库中提供一个Ant任务来简化开发。这个Ant任务由JRAntCompileTask类实现,它和Ant内置任务<javac>很是类似,只是符号和行为须要咱们关心。
模版文件的编译任务能够经过在工程的build.xml文件中像下面这样声明:
<taskdef classname="net.sf.jasperreports.ant.JRAntCompileTask" name="jrc"> <classpath> <fileset dir="./lib"> <include name="**/*.jar" /> </fileset> </classpath> </taskdef>
在上面的例子中,lib文件夹应包含jasperreports-<version>.jar文件和它所依赖的库文件(包含jdt-compiler-<version>.jar,万一你使用Java做为报表表达式的语言,这是推荐的报表编译器)。
接下来这个用户自定义的Ant任务能够用于在一个单个操做中编译多个JRXML报表模版文件。能够经过指定包含这些JRXML文件的根目录或者经过使用文件的模式匹配选择JRXML文件来指定它们。下面是模版文件编译任务的一些属性:
属性 | 描述 |
srcdir | 用于编译的JRXML文件的位置。 除非相关的元素会呈现,不然是不可省(Required)的。 |
destdir | 用于存放编译后文件的位置(默认与srcdir相同) |
compiler | (可选)实现了JRCompiler接口的类的名字 |
xmlvalidation | 用于标记报表模版的源文件的XML验证是否将被执行的标记(默认值为true) |
tempdir | 用于存储临时生成文件的位置(默认值为当前工做目录) |
keepjava | 用于代表临时生成的Java文件是否须要保留的标记(默认值为false) |
像Ant内置任务<javac>同样,报表模版文件编译任务支持内嵌的<src>和<classpath>元素。为了看到这一点起做用,能够查看JasperReports项目源码中提供的demo/samples/antcompile例子
查看一个报表设计文件
报表设计文件能够经过使用JasperDesignViewer程序来查看。在它的main()方法中,它接收一个用于查看的包含报表设计的文件名,它多是JRXML文件自身,也能够是编译后的设计文件(.jasper文件)
咱们能够经过调用JasperFillManager类的fillReportXXX()方法让一个编译好的报表文件生成报表。在这个门面接口类中有两种类型的填充方法。一类接收一个java.sql.Connection对象做为第三个参数,另外一类接收一个JRDataSource对象。
这是由于大多数时候,咱们使用一个JDBC链接获取关系型数据库中的数据来填充报表,咱们能够很方便的在报表模版文件中使用SQL查询。JasperReports引擎可使用传递给它的Connection执行SQL查询,由今生成一个报表数据源用于填充报表。
若是数据以其余的形式提供,此时将用到接收一个数据源做为参数的方法。
生成的报表能够经过使用JasperViewer程序来查看。它的main()方法接收一个用于查看的报表文件的文件名。生成的报表也能够经过调用JasperPrintManager类的printReport()、printPage()或者printPages()等静态方法来打印。
在填充了一个report后,咱们能够经过调用JasperExportManager的exportReportXXX()方法将其导出为PDF,HTML或者XML格式。
参数是在报表填充操做中传入的对象的引用。它在传递不能从数据源中找到的数据给报表引擎时很是有用。例如:若是咱们须要在报表中显示启动报表填充操做的用户的名字,咱们能够传递一个用户名给引擎;或者咱们能够经过参数来动态的改变报表的标题。
还有一个很重要的方面是:为了能在更进一步的自定义从数据库中取到的数据,能够在报表的查询字符串中使用参数,这些参数能够像为报表提供数据的查询中的动态过滤器同样工做。
在报表模版中声明一个参数很简单,咱们只须要指定其类型和参数名,例如:
<parameter class="java.lang.String" name="ReportTitle" /> <parameter class="java.lang.Integer" name="MaxOrderID" /> <parameter class="java.awt.Image" name="SummaryImage" />
在查询中有两种可能使用这些参数的方式:
1. 参数用于普通的java.sql.PreparedStatement的参数,使用如下格式:
SELECT * FROM Orders WHERE CustomerID = $P{OrderCustomer}
2. 有时,使用参数来动态修改SQL查询的一部分或者传递整个SQL查询做为参数来填充报表是颇有用的,在这些状况下,格式有些不一样,例以下面的例子:
SELECT * FROM Orders ORDER BY $P!{OrderByClause}
下面还有些系统中内置的参数,在表达式中能够直接使用:
参数名 |
描述 |
REPORT_PARAMETERS_MAP |
这个参数包含了全部用户定义和内置的参数的Map |
REPORT_CONNECTION |
一个用户提供的,用于JDBC链接数据源的java.sql.Connection |
REPORT_DATA_SOURCE |
一个表明系统内置的数据源类型或者用户提供的数据源的JRDataSource |
REPORT_MAX_COUNT |
一个用于容许用户限制数据源大小的整数 |
REPORT_SCRIPTLET |
一个由用户提供的,包含一个报表Scriptlet实例的JRAbstractScriptlet对象 |
REPORT_LOCALE |
一个包含资源组指望的locale实例的java.util.Locale对象 |
REPORT_RESOURCE_BUNDLE |
包含了本地化消息的java.util.ResourceBundle对象 |
REPORT_TIME_ZONE |
一个用于为用户格式化日期的java.util.TimeZone实例 |
REPORT_VIRTUALIZER |
虚拟化页面时用到的JRVirtualizer对象 |
REPORT_CLASS_LOADER |
一个在报表填充阶段用到的用于加载像images、fonts、或者subreport模版的java.lang.ClassLoader 实例 |
IS_IGNORE_PAGINATION |
若是被设置成java.lang.Boolean.TRUE,报表将会生成一个很长的页面,不会插入分页符 |
JasperReports使用一个叫作JRDataSource的接口来支持多种类型的数据源,这个接口有这个接口有一个默认的叫作JRResultSetDataSource的实现类,它封装了一个java.sql.ResultSet对象,它容许经过JDBC使用任何类型的关系型数据库。
使用一个JDBC数据源时,你须要传递一个java.sql.Connection对象给报表填充操做,并指定报表定义中的query(能够查看XML文件中的元素);或者经过直接提供一个java.sql.ResultSet对象来建立一个新的JRResultSetDataSource实例。
对于其余类型的数据源而言,也没有多大区别。你须要作的就是实现JRDataSource接口,或者使用JasperReports库中的某一个实现类来封装一个内存中的集合、JavaBeans数组、CSV或XML文件等。
报表的字段是惟一映射数据源中的数据到报表生成子程序的方式。当报表的数据源是一个java.sql.ResultSet时,java.sql.ResultSet对象中的全部的字段必须映射给相应的列,这些列必须拥有和ResultSet字段一样的名字和相兼容的数据类型。
好比:若是咱们想用Employees表中取出的数据生成一个报表,该表为如下结构:
字段名 | 数据类型 | 长度 |
EmployeeID | int | 4 |
LastName | varchar | 20 |
FirstName | varchar | 10 |
HireDate | datetime | 8 |
咱们能够在报表模版文件中定义如下字段:
<field class="java.lang.Integer" name="EmployeeID" /> <field class="java.lang.String" name="LastName" /> <field class="java.lang.String" name="FirstName" /> <field class="java.util.Date" name="HireDate" />
若是咱们声明一个字段,该字段在java.sql.ResultSet中没有相应的列对应,那么将会在运行时抛出一个异常。一个在java.sql.ResultSet中的列的对象若是在报表中没有对应的字段,那么在报表填充操做时将不受影响,可是它一样不可访问。
表达式是JasperReports的一个强大的功能。它们可用于声明报表中对数据分组时将会执行一系列计算的变量,来指定报表文本域内容甚至自定义报表中对象的样式。
基本上全部的报表表达式是Java表达式,它们能够引用报表中的字段(Fields)和变量(Variables)。
在一个XML报表模版文件中,定义的表达式有如下几种:
<variableexpression>
<initialvalueexpression>
<groupexpression>
<printwhenexpression>
<imageexpression>
<textfieldexpression>
在一个表达式中使用一个报表字段(Field),字段名必须放在”$F{“和”}”之间,好比:若是咱们想在报表中的一个textfield中显示两个字段链接后的值,咱们能够像下面这样定义一个表达式:
<textfieldexpression> $F{FirstName} + " " + $F{LastName} </textfieldexpression>
表达式甚至能够更复杂一些:
<textfieldexpression> $F{FirstName} + " " + $F{LastName} + " was hired on " + (new SimpleDateFormat("MM/dd/yyyy")).format($F{HireDate}) + "." </textfieldexpression>
在表达式中引用一个变量(Variable),变量名必须放在”$V{”和”}”之间,像下面的例子同样:
<textfieldexpression> "Total quantity : " + $V{QuantitySum} + " kg." </textfieldexpression>
在表达式中,能够对参数(Parameter)使用相同的符号。参数名应该放在”${”和”}”之间,像下面的例子同样:
<textfieldexpression> "Max Order ID is : " + $P{MaxOrderID} </textfieldexpression>
报表的变量是一个在表达式基础上特殊的对象。变量能够经过仅仅被声明一次并在报表中用于屡次,或者在相应的表达式中进行一系列的计算来简化报表设计。在它的表达式中,一个变量能够引用其余变量,但前提是这些被引用的变量以前报表中已经有声明。所以,报表中变量声明的顺序很重要。
正如提到的,变量能够在他们相应的表达式中执行内置类型的计算,例如count,sum,average,lowest,highest等。
一个用于计算数量总和的变量应该像如下这样声明:
<variable calculation="Sum" class="java.lang.Double" name="QuantitySum"> <variableexpression> $F{Quantity} </variableexpression> </variable>
对于执行计算的变量,咱们能够指定它们从新初始化的级别。默认级别是Report,那意味着这个变量在整个报表开始时只初始化一次,而后它将执行指定的计算直到报表结束。可是咱们能够指定一个重置变量的较低级别,例如页面级别(page),列级别(column)或者组级别(group)。
好比:若是咱们想计算每一页的总量,咱们应该这样声明一个变量:
<variable calculation="Sum" class="java.lang.Double" name="QuantitySum" resettype="Page" > <variableexpression> $F{Quantity} </variableexpression> <initialvalueexpression> new Double(0) </initialvalueexpression> </variable>
这个变量将在每一页开始时初始化为0值。
这里还有如下能够在表达式中直接使用的内置变量:
PAGE_NUMBER
COLUMN_NUMBER
REPORT_COUNT
PAGE_COUNT
COLUMN_COUNT
GroupName_COUNT
当构建一个报表时,咱们须要定义区域的布局和内容。整个报表文件结构是基于如下区域的:
<pageheader>
<groupheadr>
<groupfooter>
<pagefooter>
<summary>
<columnheader>
<detail>
<columnfooter>
<lastpagefooter>
<nodata>
Sections是报表中的一部分,它有一个指定的高度和宽度,而且能够包含例如线条(lines)、矩形(rectangles)、图像(images)或者文本域(textfields)等报表元素。当在XML报表模版文件中声明报表区域的布局和内容时,咱们使用通常的元素。
下面这个页眉中,只包含了一个线条对象和一个静态文本:
<pageheader> <band height="30"> <rectangle> <reportelement height="25" width="555" x="0" y="0"></reportelement> <graphicelement></graphicelement> </rectangle> <statictext> <reportelement height="25" width="555" x="0" y="0"></reportelement> <textelement textalignment="Center"></textelement> <text>Northwind Order List</text> </statictext> </band> </pageheader>
有时候一组元素须要共享一个公共的背景色或者一个公共的边框。这是经过在它们后面放一个矩形来实现的,可是这样作对网格导出器(grid exporters)是不起做用的,由于它不支持重叠的元素。
新的Frame元素将被网格导出器识别,能够被用于将元素嵌入Frame中来对元素进行分组。Frames能够被嵌入无限层。
分组表明了一种在报表中组织数据的灵活的方式。当填充一个报表的时候,JasperReports引擎将检测全部定义的分组表达式来判断是否发生了分组结束,若是是,引擎将在报表中使用相应的<groupfooter>(这个分组的groupfooter)和<groupheader>(下个分组的groupheader,若是有的话。译者注。)区域。
只要咱们须要,在报表中咱们能够有不少个group。报表中声明的分组顺序很重要,由于分组互相包含,一个组包含接下来的一个组,等等。当一个大的分组结束时,全部子分组会被从新初始化。
声明一个报表分组时,会同时给出相应的数据分组表达式,咱们会声明两种区域:就是分组的header和分组的footer。
请查阅Jasper样例报表来查看如何定义分组。
如今你能够以任何语言建立报表了!
介绍的元素中的新属性容许在Java字体和PDF字体间创建映射关系。PDF使用特殊的字体设置,在JasperReports之前的版本中没有一种方式可使用它们。经过介绍这些新的属性,用户能够指定PDF将使用哪一种字体来显示不一样的字符集(pdfFontName属性),将使用何种编码方式(pdfEncoding属性)以及是否该字体会被嵌入到PDF文档中(isPdfEmbedded属性)。
为了简化字体设置,一个新的元素出现了:
报表字体是报表级别的字体定义,它能够在整个报表的其余字体定义中被用于默认或者基准字体设置。由于对国际化字符的支持在某种程度上跟iText库相关联。你能够查看iText文档以得到关于怎样以不一样语言不一样字符集来建立一个PDF文档的更多信息。
为了将一组被用于报表元素的视觉特性进行分组,引入了报表样式。这个新概念是一个之前的报表字体(如今已过期)的扩展。引用了报表样式的报表元素可以覆盖任何在样式中定义的视觉特性。
报表样式一样能够引用其余的报表样式,而且拥有一样的用于样式的继承和覆盖机制。样式在整个组的元素须要共享一样的视觉特性的时候很是有用,由于对样式的任何改变都会被用于该组中全部的元素。这能够经过改变它们共同引用的报表样式来实现。
在报表样式中显示的全部数据均来自报表参数(Parameters)和报表的字段(Fields)。这些数据可使用报表变量(Variable)和它们组成的表达式来处理。
处理变量有特定的时刻。一些变量在报表开始时根据它们的resettype来初始化,一些在赶上分页(page break)或者分列(column break)时,亦或者在分组改变(group change)时。另外,变量在每次从数据源中取出新数据时被赋值(每行都会赋值一次)。
可是只有简单的变量表达式有时不能实现复杂的功能,这时就要用到小脚本了。
小脚本是Java代码片断,它们能够在每次报表事件发生时被执行。经过使用小脚本,用户能够修改报表变量中存放的值。
由于小脚本主要和报表变量一块儿工做,在准确的时刻彻底控制脚本的执行是极为重要的。JasperReports容许用户自定义的Java代码在根据变量的重置类型(Report、Page、Column和Group)初始化报表变量的“以前”或者“以后”被执行。
为了利用好这个功能,用户只须要经过继承JRAbstractScriptlet类或者JRDefaultScriptlet类来建立一个脚本类便可。这个自定义脚本类的名字必须在<jsaperreport>元素中的scriptletClass属性中指定。
当建立一个JasperReports脚本类时,开发者须要实现或者覆盖几个方法,好比:beforeReportInit, afterReportInit(), beforePageInit(), afterPageInit(), beforeGroupInit(), afterGroupInit()等,这些方法将会在填充报表的合适时候被报表引擎调用。
有一个默认的报表参数叫REPORT_SCRIPTLET,它表明了一个对报表引擎在填充报表时初始化的脚本对象的引用,它能够被用于整个报表的表达式中来调用脚本对象中的自定义方法,这使得整个机制更加灵活。
以上就是小脚本的全部了!详见ScriptletReport例子。
子报表是一个报表生成工具重要的功能。子报表容许建立更加复杂的报表来简化设计工做。
子报表在建立概览--明细类型的报表或者单个报表不足以描述复杂的输出文档时很是有用。
子报表其实就是一个包含在另外一个报表中的普通报表。一个报表能够和子报表重叠,还能够建立包含本身的一个子报表,这种嵌套能够深至无限的深度。任何的报表模版在被嵌入到其余报表时不须要修改里面的任何地方就能够被做为一个子报表。
像其余报表元素同样,子报表元素有一个将在运行时为了得到JasperReports对象的资源而被计算的表达式。
一共有两种方式能够为子报表提供参数值。一种是,你可使用用于生成指定参数映射Map的元素,或者你可使用<subreportparameter>元素为每个相关的参数赋值。若是同时使用两种方式为子报表参数赋值,那么使用<subreportparameter>指定的参数值将覆盖使用<parametersmapexpression>元素指定的值。
就像普通报表同样,子报表也以一样的方式,须要一个数据源来生成相应的内容,而且子报表在填充时但愿接收到相同的输入类型。
从子报表中计算出的值能够被返回到父报表,在一个子报表填充值以后,子报表的变量值能够被赋值或者累计(使用一个增加器)到父报表的变量中。
详情请查阅Subreport样例。
JasperReports容许经过使用新的resourceBundle属性在运行时或者在运行时为内置参数REPORT_RESOURCE_BUNDLE赋一个值来关联一个java.util.ResourceBundle对象。
若是须要以不一样于当前本地环境(Locale)的环境生成,那么在填充报表时这个内置参数REPORT_LOCALE应该被用于指定运行时的本地环境。
为了更容易的国际化报表,在报表表达式中有一个特殊符号容许引用放在报表关联的java.util.ResourceBundle对象中的字符串资源。$R{...}表达式用于封装资源束(Resource Bundle)的key来获取对应的值。
为了格式化基于报表本地环境的不一样语言中的消息,在报表关联的JRCalculator中有一个内置方法提供和java.text.MessageFormat类类似的功能。这个方法就是msg(),它容许在消息中最多使用3个参数。一样的,还提供了内置的str()方法,它的做用和表达式中$R{...}符号相同,都是基于报表的本地环境访问资源束。
在生成的输出中,JasperReports库会保存文本运行方向,以便以不一样语言生成的拥有从右到左的书写(好比阿拉伯语和希伯来语)的文档可以被正确的渲染。
详情请查阅I18nReport和UnicodeReport样例。
图表和交叉表有时候须要使用在报表填充时没有被迭代的数据。这就是数据源的某些字段自身做为子报表的数据源这种状况。
为了不使用子报表来渲染图表或者交叉表,咱们引入了一个叫作数据集(Dataset)的新概念。一个数据集是一个数据源和子报表之间的概念,由于它包含了参数(Parameters)、字段(Fields)、变量(Variables)和分组(Groups),可是没有布局(Layout)信息。
详情请查阅/demos/samples/charts和Crosstabs样例。
JasperReports如今内置支持使用图表。尽管咱们已经有图像、文本域子报表和其余元素可用,还有一种新的、当即可用的图表组件。这极大的简化了把图表嵌入到报表中的方式,由于这以前,用户必须彻底依赖于小脚本(scriptlets)来收集图表数据并在报表模版中使用一个image元素来渲染图表。
如今经过使用新的chart组件,用户只须要设置指望的样式而且在迭代报表数据源时以一种增加的方式定义可以帮助引擎构建图表数据集的表达式便可。
在嵌入和配置图表组件时,有三个相关的实体:
全局的chart组件
chart数据集(将chart数据分组的相关设置)
chart样式(chart条目在渲染时相关的样式设置)
JasperReports目前支持如下几种图表:
饼图、3D饼图、条形图、3D条形图、堆积图、3D堆积图、折线图、区域图、散点图、气泡图、时序图和高低开合图。
这些图表使用几种数据集(每一种图表和几种指定的数据集工做):饼图数据集、种类数据集、XY数据集、时序数据集、时间段值、XYZ数据集和高低数据集。
对于全部的图表,咱们能够配置如下属性:
四周的边框
背景色
标题
标题位置(顶部、左边、底部、右边)
标题字体
标题颜色
子标题
子标题字体
子标题颜色
显示/隐藏图例
绘图区域背景色
绘图区域背景色透明度(alpha值)
绘图区域前景色透明度(alpha值)
绘图区域方向(垂直、水平)
坐标文本
对于全部的数据集,咱们能够配置如下属性:
增加类型(详细、列、页、分组、报表)
增加分组
重置类型(无、按列、按页、按组、按报表)
重置分组
图表类型的详细设置:
3D饼图
深度因子
条形图、XY条形图、堆积条形图
隐藏/显示文本
隐藏/显示提示标记
隐藏/显示提示文本
3D条形图,3D堆积条形
图隐藏/显示文本
x偏移量(3D效果)
y偏移量(3D效果)
折线图、XY折线图、散点图、时序图
隐藏/显示线条
隐藏/显示图形气泡图
气泡图
缩放类型
高低开合图
隐藏/显示关闭提示
隐藏/显示打开提示
JasperReports使用JFreeChart库来渲染图表。关于怎么使用这个功能,能够在提供的JFreeChart样例中找到。
交叉表是一个特殊类型的表组件,它的行和列都是动态的。它们用于显示在列(columns)和组(groups)上使用多级分组的聚合数据。
详情请查阅提供的Crosstabs样例。
原文地址:http://community.jaspersoft.com/wiki/jasperreports-library-tutorial