开发手册 欢迎您!
软件开发者资料库

创建图表

JasperReports创建图表 - 使用从环境设置,报表设计,编译报表设计,填充报表,查看和打印报表,导出,参数,数据源开始的基本到高级知识的初学者教程,简单轻松地学习设计和创建JasperReports字段,表达式,变量,部分,组,样式,Scriplets,子报告,图表,Corsstabs和国际化。

早期人们不得不依靠scriptlet收集图表数据并使用报告模板中的图像元素渲染图表. JasperReports现在变得简单,因为它内置了对使用新图表组件的图表的支持.

使用新的图表组件,用户只需要应用视觉设置和定义表达式这将有助于构建图表数据集. JasperReports使用JFreeChart作为底层图表库.配置新图表组件时,涉及以下三个组件;

  • 整个图表组件.

  • 图表数据集(将图表数据相关的设置分组).

  • 图表图(哪些组与图表项目呈现方式相关的视觉设置.

JasperReports目前支持以下类型的图表:Pie,Pie 3D,酒吧,酒吧3D,XY酒吧,堆积酒吧,堆积酒吧3D,线,XY线,面积,XY区域,堆积区域,散点图,泡沫,时间序列,高低开 - 关闭,烛台,多轴,米,温度计和甘特图.

图表属性

图表是常规报表元素,因此它们与所有其他报表元素共享一些属性.有一个名为< chart >的JRXML元素,用于创建所有类型的图表.此元素对特定于图表的特定设置进行分组,这些设置适用于所有类型的图表.

图表子元素

< chart>的子元素;元素是 :

  • < reportElement> : 这些是可显示的对象,例如您放在报告模板部分中的静态文本,文本字段,图像,线条和矩形.

  • < Box> ; : 此元素用于通过可在每一侧自定义的边框环绕图表.

  • < chartTitle> : 此元素用于放置图表的标题. position 属性决定报告中图表的标题位置.此元素具有属性 -  位置(值可以是顶部底部 .Deafult值是 Top ),颜色. < chartTitle>将 font titleExpression 作为子元素.

  • < chartSubtitle> &减去;此元素用于放置图表的副标题.此元素具有属性 -  颜色. < chartSubtitle>将 font subtitleExpression 作为子元素.

  • < chartLegend> : 元素可以使用此元素控制字体相关属性以及图表图例的文本颜色和背景颜色.此元素具有属性 -   textColor backgroundColor .

  • < anchorNameExpression> : 此元素为锚点创建目标.

  • < hyperlinkReferenceExpression> : 此元素包含一个报表表达式,指示外部资源的名称(通常是URL).

  • < hyperlinkAnchorExpression> : 超级链接指向外部资源中的锚点.

  • < hyperlinkPageExpression> : 超链接指向当前报告中的页面.

  • < hyperlinkTooltipExpression> : 此元素控制超链接的工具提示.表达式的类型应该是 java.lang.String .

  • < hyperlinkParameter> &minus ;此元素(如果存在)根据参数值生成最终超链接.

图表属性

< chart>中的属性可用于所有图表类型的元素是 :

  • isShowLegend : 如果图表图例将显示在报表上,则此属性用于确定.值可以是 true false .默认值为 true .

  • evaluationTime : 确定何时评估图表的表达式.值可以是现在报告页面的.默认值为现在.

  • evaluationGroup : 此属性确定用于评估图表表达式的组的名称.此属性的值必须与组的名称匹配,我们希望将其用作图表的评估组.

  • hyperlinkType : 此属性可以包含任何文本值.默认值为.这意味着,即使存在特殊的超链接表达式,文本字段和图像也不代表超链接.

  • hyperlinkTarget : 此属性有助于在查看器中单击指定链接时自定义指定链接的行为.值可以是 Self Blank .默认值为 Self .

  • bookmarkLevel : 设置为正整数时,此属性会在导出为PDF的报表中生成书签.默认值为 0 .

  • customizerClass : 这是可用于自定义图表的类(可选)的名称.此元素的值必须是包含自定义程序类名称的String.

图表自定义

如上所述,JasperReports使用 JFreeChart 作为底层图表库. JFreeChart 包含JasperReports不直接支持的功能.我们可以通过< chart>中的 customizerClass 属性提供自定义程序类来利用这些功能.元件.定制器类不是什么,而是 net.sf.jasperreports.engine.JRChartCustomizer 接口的实现.实现此接口的最简单方法是扩展 net.sf.jasperreports.engine.JRAbstractChartCustomizer 类,从而可以访问参数,字段和变量,以便根据报告数据进行更灵活的图表自定义./p>

图表数据集

所有图表类型的一个常见属性是< dataset >元件.图表数据集有助于在运行时映射报表数据和检索图表数据.每个图表类型包含不同的子元素以定义图表的表达式.这些表达式定义用于生成图表的数据.所有这些子元素都包含<数据集>定义图表表达式何时被评估和重置的元素.

JasperReports中有几种类型的图表数据集,因为每种类型的图表都适用于某些数据集:饼图,类别,XY,时间序列,时间段,XYZ和高 - 低.这些数据集类型中的每一个都实现了定义图表数据集的 net.sf.jasperreports.engine.JRChartDataset 接口.所有图表数据集都以相同的方式初始化和递增;但是,它们的区别仅在于它们映射的数据类型或数据系列.

数据集属性

下面给出的表总结了元素的属性:

属性描述
resetType此属性确定何时重置图表表达式的值.无,报表,页面,列,组.默认值为报告.
resetGroup此属性确定重置图表表达式值的组的名称.此属性的值必须与JRXML报告模板中声明的任何组的名称匹配.
incrementType此属性确定何时重新计算图表表达式的值.无,报告,页面,列,组.默认值为"无".
incrementGroup此属性确定重新计算图表表达式的组的名称.此属性的值必须与JRXML报告模板中声明的组的名称相匹配.

下表总结了元素< dataset>元素的子元素.  :

子元素描述
< incrementWhenExpression>可以自定义图表数据集递增的方式通过使用此子元素过滤掉不需要的数据.
< datasetRun>这包含实例化报告子数据集所需的信息.

数据集类型

特定数据集类型在下面和下面解释;

饼数据集

饼图数据集的特征在于以下表达式 :

  • < keyExpression> :表示将构成饼图中切片的类别.该表达式可以返回任何java.lang.Comparable对象.

  • < valueExpression> :生成与数据集中的每个类别/键对应的值.值始终是java.lang.Number对象.

  • < labelExpression> :如果缺少此表达式,图表将显示饼图中每个切片的默认标签.使用此表达式返回java.lang.String值,以自定义饼图的项标签.

  • < sectionHyperlink> :设置与饼图部分关联的超链接.

类别数据集

类别数据集的特点是< categorySeries> ;元素,其中包含 :

  • < seriesExpression> :表示系列的名称.该表达式可以返回任何java.lang.Comparable对象.

  • < categoryExpression> :返回系列表达式指定的系列中每个值的类别名称.类别是java.lang.Comparable对象.

  • < valueExpression> :生成与数据集中每个类别对应的值.值始终是java.lang.Number对象.

  • < labelExpression> :如果缺少此表达式,图表将显示图表中每个项目的默认标签.使用此表达式返回java.lang.String值,以自定义图表的项标签.

  • < itemHyperlink> :设置与图表项目关联的超链接.

XY数据集

XY数据集的特征在于元素,其中包含 :

  • < seriesExpression> :表示系列的名称.该表达式可以返回任何java.lang.Comparable对象.

  • < xValueExpression> :返回表示将添加到当前数据系列的(x,y)对的X值的java.lang.Number值.

  • < yValueExpression> :返回表示将添加到当前数据系列的(x,y)对的Y值的java.lang.Number值.

  • < labelExpression> :如果缺少此表达式,图表将显示图表中每个项目的默认标签.使用此表达式返回java.lang.String值,以自定义图表的项标签.

  • < itemHyperlink> :设置与图表项目关联的超链接.

XYZ数据集

XYZ数据集的特征是< xyzSeries>元素,其中包含 :

  • < seriesExpression> :表示系列的名称.该表达式可以返回任何java.lang.Comparable对象.

  • < xValueExpression> :返回表示将添加到当前数据系列的(x,y,z)项的X值的java.lang.Number值.

  • < yValueExpression> :返回表示将添加到当前数据系列的(x,y,z)项中的Y值的java.lang.Number值.

  • < zValueExpression> :返回表示将添加到当前数据系列的(x,y,z)项的Z值的java.lang.Number值.

  • < labelExpression> :如果缺少此表达式,图表将显示图表中每个项目的默认标签.使用此表达式返回java.lang.String值,以自定义图表的项标签.

  • < itemHyperlink> :设置与图表项目关联的超链接.

时间序列数据集

时间序列数据集是以timePeriod属性为特征,< timeSeries>元件. timePeriod属性指定数据集内数据系列的类型.时间序列可以包含与天,月,年或其他预定义时间段相关联的数值.可能的值包括:年,季度,月,周,日 - 这是默认值,小时,分钟,秒,毫秒.

< timeSeries>元素包含 :

  • < seriesExpression> :表示系列的名称.该表达式可以返回任何java.lang.Comparable对象.

  • < timePeriodExpression> :返回一个java.util.Date值,引擎将根据上面提到的timePeriod属性设置的值提取相应的时间段.

  • < valueExpression> :当递增数据集的当前系列时,返回java.lang.Number值以与相应的时间段值相关联.

  • < labelExpression> :如果缺少此表达式,图表将显示图表中每个项目的默认标签.使用此表达式返回java.lang.String值,以自定义图表的项标签.

  • < itemHyperlink> :设置与图表项目关联的超链接.

时间段数据集

时间段数据集是以< timePeriodSeries>为特征的元素,其中包含 :

  • < seriesExpression> :表示系列的名称.该表达式可以返回任何java.lang.Comparable对象.

  • < startDateExpression> :指定数字值在添加到时间段系列时与之关联的日期间隔的开始.

  • < endDateExpression> :指定数字值在添加到时间段系列时与之关联的日期间隔的结束.

  • < valueExpression> :返回java.lang.Number值以与开始日期和结束日期表达式指定的当前日期间隔关联.

  • < labelExpression> :如果缺少此表达式,图表将显示图表中每个项目的默认标签.使用此表达式返回java.lang.String值,以自定义图表的项标签.

  • < itemHyperlink> :设置与图表项目关联的超链接.

高低数据集

高低数据集是由以下表达式表示 :

  • < seriesExpression> :目前,High-Low或Candlestick图表中仅支持一个系列.但是,此单个系列必须由此表达式返回的java.lang.Comparable值标识,并且还必须用作图表图例中的系列名称.

  • < dateExpression> :返回当前(高,低,开,结,音量)项所指的日期.

  • < highExpression> :返回一个java.lang.Number值,该值将是数据集递增时添加到系列中的数据项的一部分.

  • < lowExpression> :返回一个java.lang.Number值,该值将在数据集递增时添加到系列中的数据项的一部分.

  • < openExpression> :返回一个java.lang.Number值,该值将是数据集递增时添加到系列中的数据项的一部分.

  • < closeExpression> :返回一个java.lang.Number值,该值将是数据集递增时添加到系列中的数据项的一部分.

  • < volumeExpression> :一个数字表达式,返回用于当前数据项的音量值.它仅用于烛台图表.

  • < itemHyperlink> :设置与图表项目关联的超链接.

值数据集

这是一个特殊的图表数据集包含单个值的实现,用于呈现Meter和Thermometer图表.使用< valueExpression>收集该值.表达.

图表图

所有图表类型的另一个常见JRXML元素是< plot>元件.这允许我们定义几个图表的特征,如方向和背景颜色.根据图表的类型,图表不同.

绘图属性

下面给出的表总结了< plot>的属性.元素 :

属性描述
backcolor这属性定义图表的背景颜色.任何六位十六进制值都是此属性的有效值.十六进制值必须以#开头.
orientation此属性定义图表的方向.水平,垂直默认值为"垂直"
backgroundAlpha此属性定义图表背景颜色的透明度.此属性的有效值包括之间的任何十进制数0和1,包括在内.数字越大,背景透明度越低.
默认值为"1".
foregroundAlpha这attribute定义图表前景色的透明度.此属性的有效值包括0到1之间的任何十进制数,包括0和1.数字越大,背景透明度越低.
默认值为"1".
labelRotation这属性允许在x轴上旋转文本标签以顺时针或逆时针旋转.此属性仅适用于x轴不是数字或不显示日期的图表.默认值为"0.0."

< plot> element有一个子元素< seriesColor>哪些属性是: seriesOrder color .此元素自定义系列的颜色,以及它们在颜色序列中的位置.

图表图的特定设置

  • piePlot : 它没有特定的设置

  • pie3DPlot : 包含 depthFactor 属性,数值范围从0到1,表示饼图的深度占绘图区域高度的百分比.

  • barPlot : 可以显示或隐藏刻度标签,刻度线或项目标签,并提供两个轴的设置.

  • bar3DPlot : 提供与barPlot相同的设置,并使用xOffset和yOffset属性生成3D效果.

  • linePlot : 可以显示或隐藏连接项目点的线条,可以显示或隐藏与项目点相关联的形状,并提供两个轴的设置.

  • scatterPlot : 与linePlot类似,它可以显示或隐藏连接项目点的线条,可以显示或隐藏与项目点相关联的形状,并提供两个轴的设置.

  • areaPlot : 为两个轴提供设置.

  • bubblePlot : 可以通过设置scaleType属性来设置气泡尺寸,并为两个轴提供设置.

  • timeSeriesPlot : 可以显示或隐藏连接项目点的线条,可以显示或隐藏与项目点相关联的形状,并提供两个轴的设置.

  • highLowPlot : 可以显示或隐藏打开的刻度,可以显示或隐藏关闭的刻度,并为两个轴提供设置.

  • candlestickPlot : 可以显示或隐藏音量,并为两个轴提供设置.

  • meterPlot : 包含表盘形状,刻度角,测量单位,刻度间隔,刻度盘颜色,针颜色,刻度颜色,值显示字体,颜色和格式图案,数据范围和仪表间隔的特定设置.

  • thermometerPlot : 包含值位置,水银颜色,显示/隐藏值行,值显示字体,颜色和格式模式,数据范围,低范围,中等范围和高范围的特定设置.

  • multiAxisChart : 包含绘图中包含的轴的特定设置.

图表类型

JasperReports提供内置功能-in支持多种图表类型.它们列在下面和下面;

  • pieChart : 饼图数据集和饼图的组合.

  • pie3DChart : 对饼图数据集和饼图3D图进行分组.

  • barChart : 类别数据集和条形图的基本组合.

  • bar3DChart : 包装类别数据集和条形3D图.

  • xyBarChart : 支持时间段数据集,时间序列数据集和XY数据集,并使用条形图来渲染轴和项目.

  • stackedBarChart : 使用类别数据集中的数据并使用条形图呈现其内容.

  • stackedBar3DChart : 使用Category数据集中的数据并使用Bar 3D图表呈现其内容.

  • lineChart : 对类别数据集和线图进行分组.

  • xyLineChart : 对XY数据集和线图进行分组.

  • areaChart : 类别数据集中的项目使用面积图进行渲染.

  • stackedAreaChart : 类别数据集中的项目使用面积图进行渲染.

  • xyAreaChart : 使用来自XY数据集的数据并通过区域图绘制它.

  • scatterChart : 用散点图包裹XY数据集.

  • bubbleChart : 将XYZ数据集与气泡图合并.

  • timeSeriesChart : 对时间序列数据集和时间序列图进行分组.

  • highLowChart : 高 - 低数据集和高 - 低情节图的组合.

  • candlestickChart : 使用来自高 - 低数据集的数据,但使用特殊的烛台图.

  • meterChart : 使用Meter图中的渲染选项,从表盘上的Value数据集中显示单个值.

  • thermometerChart : 使用温度计图中的渲染选项显示值数据集中的单个值.

  • multiAxisChart : 包含多个范围轴,所有轴共享一个公共域轴.

示例

演示图表,让我们写一个新的报告模板(jasper_report_template.jrxml).在这里,我们将添加< barChart >元素到< pageHeader>部分和< pieChart >到< summary>部分.我们将在图表中显示为每个主题获得的标记.将其保存到目录 C:\tools\jasperreports-5.0.1 \ test .该文件的内容如下所示 :

                                                               <band height = "79" splitType = "Stretch"/>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

上述文件的详细信息如下所示 :

  • 用于创建条形图的JRXML元素是在< pageHeader>中.它包含子元素,包含< reportElement>定义图表尺寸和位置的子元素.

  • < dataset>条形图中的元素必须包含在< categoryDataset>之间.和 JRXML元素.

  • < categoryDataset>必须包含< categorySeries>元件.此元素定义条形将表示的数据元素(在此示例中为主题名称).

  • < categoryDataset>还必须包含一个元素,该元素定义如何将数据分成类别以进行比较.在这里,数据按主题名称分隔.

  • < valueExpression> element定义使用什么表达式来确定图表中每个条形的值.在这里,我们使用"标记".

  • 对于饼图,我们使用了元素< pieChart>在< summary>下部分.它包含子元素.

  • 子元素包含一个报表表达式,指示在图表中用作键的内容.这里,我们使用了subjectName.

  • 子元素包含一个用于计算键值的表达式.在这里,我们使用了标记.

报告填充的java代码保持不变.文件 C:\tools\jasperreports-5.0.1\test\src\com\it1352\ JapersReportFill.java 的内容如下所示 :

  package com.it1352;  import java.util.ArrayList;  import java.util.HashMap;  import java.util.Map;  import net.sf.jasperreports.engine.JRException;  import net.sf.jasperreports.engine.JasperFillManager;  import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; 公共类JasperReportFill { @SuppressWarnings("unchecked") public static void main(String [] args){ String sourceFileName = " C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";  DataBeanList DataBeanList = new DataBeanList();  ArrayList< DataBean> dataList = DataBeanList.getDataBeanList();  JRBeanCollectionDataSource beanColDataSource = new  JRBeanCollectionDataSource(dataList);  Map parameters = new HashMap();  try { JasperFillManager.fillReportToFile(sourceFileName, parameters,beanColDataSource); } catch(JRException e){ e.printStackTrace(); } } }

因为我们将显示为每个主题获得的标记,所以需要更改POJO .文件 C:\tools\jasperreports-5.0.1\test\src\com\it1352\ DataBean.java 的内容如下所示 :

package com.it1352; import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import net.sf.jasperreports.engine.JRException;import net.sf.jasperreports.engine.JasperFillManager;import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;public class JasperReportFill {   @SuppressWarnings("unchecked")   public static void main(String[] args) {      String sourceFileName =          "C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";      DataBeanList DataBeanList = new DataBeanList();      ArrayList dataList = DataBeanList.getDataBeanList();      JRBeanCollectionDataSource beanColDataSource = new          JRBeanCollectionDataSource(dataList);      Map parameters = new HashMap();      try {         JasperFillManager.fillReportToFile( sourceFileName,            parameters, beanColDataSource);      } catch (JRException e) {         e.printStackTrace();      }   } }

甚至文件的内容 C:\ tools \ jasperreports- 5.0.1\test\src\com\it1352\DataBeanList.java need to be updated as given below  :

package com.it1352; public class DataBean {   private String subjectName;   private Integer marks;   public String getSubjectName() {      return subjectName;   }   public void setSubjectName(String subjectName) {      this.subjectName = subjectName;   }   public Integer getMarks() {      return marks;   }   public void setMarks(Integer marks) {      this.marks = marks;   }  }

Report Generation

Next, let’s compile and execute the above files using our regular ANT build process.文件build.xml的内容(保存在目录C:\tools\jasperreports-5.0.1 \ test下面)如下所示.

导入文件 -  baseBuild. xml是从环境设置一章中选取的,应该与build.xml放在同一目录中.

                                                                                                                                                                  

接下来,让我们打开命令行窗口并转到build.xml所在的目录. Finally, execute the command ant -Dmain-class=com.it1352.JasperReportFill (viewFullReport is the default target) as follows  :

C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.IT屋.JasperReportFillBuildfile: C:\tools\jasperreports-5.0.1\test\build.xmlclean-sample:   [delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes   [delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper   [delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprintcompile:   [mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes   [javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:   warning: 'includeantruntime' was not set, defaulting to bu   [javac] Compiling 3 source files to C:\tools\jasperreports-5.0.1\test\classescompilereportdesing:   [jrc] Compiling 1 report design files.   [jrc] log4j:WARN No appenders could be found for logger   (net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).   [jrc] log4j:WARN Please initialize the log4j system properly.   [jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig       for more info.   [jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.run:   [echo] Runnin class : com.IT屋.JasperReportFill   [java] log4j:WARN No appenders could be found for logger   (net.sf.jasperreports.extensions.ExtensionsEnvironment).   [java] log4j:WARN Please initialize the log4j system properly.viewFillReport:   [java] log4j:WARN No appenders could be found for logger   (net.sf.jasperreports.extensions.ExtensionsEnvironment).   [java] log4j:WARN Please initialize the log4j system properly.BUILD SUCCESSFULTotal time: 19 minutes 45 seconds

As a result of above compilation, a JasperViewer window opens up as in the screen below  :

Jasper Bar  Chart Example


Jasper Pie Chart Example

Here, we see that the bar chart is created in the pageheader and the pie chart is created in the summary sections.

})();