创建图表
以前人们必须依靠脚本来收集图表数据,并使用报告模板中的图像元素呈现图表。JasperReports 现在让这一切变得简单,因为它使用新的图表组件内置了对图表的支持。
使用新的图表组件,用户只需应用视觉设置并定义有助于构建图表数据集的表达式。JasperReports 使用 JFreeChart 作为底层图表库。配置新的图表组件时,涉及以下三个组件 −
整体图表组件。
图表数据集(将与图表数据相关的设置分组)。
图表图(将与图表项目呈现方式相关的视觉设置分组)。
JasperReports 目前支持以下类型的图表:饼图、3D 饼图、条形图、3D 条形图、XY 条形图、堆叠条形图、3D 堆叠条形图、折线图、XY 折线图、面积图、XY 面积图、堆叠面积图、散点图、气泡图、时间序列图、最高最低开盘收盘图、蜡烛图、多轴图、仪表图、温度计图和甘特图。
图表属性
图表是普通的报表元素,因此它们与所有其他报表元素共享一些属性。 JRXML 元素名为 <chart>,用于创建所有类型的图表。此元素将适用于所有类型图表的特殊图表特定设置分组。
图表子元素
<chart> 元素的子元素是 −
<reportElement> − 这些是可显示的对象,例如您放置在报告模板部分中的静态文本、文本字段、图像、线条和矩形。
<Box> − 此元素用于通过可自定义的边框围绕图表。
<chartTitle> − 此元素用于放置图表的标题。 position 属性决定图表在报告中的标题位置。此元素具有属性 - Position(值可以是 Top、Bottom、Left、Right。默认值为 Top)、color。 <chartTitle>具有 font 和 titleExpression 作为子元素。
<chartSubtitle> − 此元素用于放置图表的副标题。此元素具有属性 - color。<chartSubtitle> 具有 font 和 subtitleExpression 作为子元素。
<chartLegend> − 此元素可以使用此元素控制字体相关属性以及图表图例的文本颜色和背景颜色。此元素具有属性 - textColor 和 backgroundColor。
<anchorNameExpression> −此元素为锚点创建目标。
<hyperlinkReferenceExpression> − 此元素包含一个报表表达式,指示外部资源的名称(通常是 URL)。
<hyperlinkAnchorExpression> − 超链接指向外部资源中的锚点。
<hyperlinkPageExpression> − 超链接指向当前报表中的页面。
<hyperlinkTooltipExpression> − 此元素控制超链接的工具提示。表达式的类型应为 java.lang.String。
<hyperlinkParameter> −当此元素存在时,它会根据参数值生成最终的超链接。
图表属性
<chart> 元素中可用于所有图表类型的属性为 −
isShowLegend − 此属性用于确定是否在报告上显示图表图例。值可以是 true 或 false。默认值为 true。
evaluationTime − 确定何时评估图表的表达式。值可以是 Now、Report、Page、Column、Group、Band。默认值为 Now。
evaluationGroup −此属性确定用于评估图表表达式的组的名称。此属性的值必须与我们希望用作图表评估组的组的名称相匹配。
hyperlinkType − 此属性可以保存任何文本值。默认值为 None。这意味着,即使存在特殊的超链接表达式,文本字段和图像都不代表超链接。
hyperlinkTarget − 此属性有助于自定义在查看器中单击指定链接时的行为。值可以是 Self 或 Blank。默认值为 Self。
bookmarkLevel − 此属性设置为正整数时,会在导出为 PDF 的报告中生成书签。默认值为 0。
customizerClass − 这是可用于自定义图表的类的名称(可选)。此元素的值必须是包含自定义类名称的字符串。
图表自定义
如上所述,JasperReports 使用 JFreeChart 作为底层图表库。JFreeChart 包含 JasperReports 不直接支持的功能。我们可以通过在 <chart> 元素中的 customizerClass 属性提供自定义类来利用这些功能。自定义类只不过是 net.sf.jasperreports.engine.JRChartCustomizer 接口的实现。实现此接口的最简单方法是扩展 net.sf.jasperreports.engine.JRAbstractChartCustomizer 类,从而可以访问参数、字段和变量,以便根据报告数据更灵活地自定义图表。
图表数据集
所有图表类型的共同属性之一是 <dataset> 元素。图表数据集有助于映射报告数据并在运行时检索图表数据。每种图表类型包含不同的子元素来定义图表的表达式。这些表达式定义用于生成图表的数据。所有这些子元素都包含一个 <dataset> 元素,该元素定义何时评估和重置图表的表达式。
JasperReports 中有几种类型的图表数据集,因为每种类型的图表都适用于某些数据集:饼图、类别、XY、时间序列、时间段、XYZ 和高低。这些数据集类型中的每一种都实现了定义图表数据集的 net.sf.jasperreports.engine.JRChartDataset 接口。所有图表数据集都以相同的方式初始化和递增;但是,它们仅在映射的数据类型或数据系列上有所不同。
数据集属性
下表总结了元素 <dataset> 的属性 −
属性 | 描述 | 值 |
---|---|---|
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 数据集的特征是 <xySeries> 元素,其中包含 −
<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> − 目前,高低图或蜡烛图内仅支持一个系列。但是,这个单个系列必须由该表达式返回的 java.lang.Comparable 值标识,并且还必须用作图表图例中的系列名称。
<dateExpression> − 返回当前(最高、最低、开盘、收盘、成交量)项目所指的日期。
<highExpression> − 返回一个 java.lang.Number 值,该值将成为数据集增加时添加到系列的数据项的一部分。
<lowExpression> − 返回一个 java.lang.Number 值,该值将成为数据集增加时添加到系列的数据项的一部分。
<openExpression> −返回一个 java.lang.Number 值,该值将成为数据集增加时添加到系列的数据项的一部分。
<closeExpression> − 返回一个 java.lang.Number 值,该值将成为数据集增加时添加到系列的数据项的一部分。
<volumeExpression> − 一个数值表达式,返回当前数据项使用的成交量值。它仅用于蜡烛图。
<itemHyperlink> − 设置与图表项关联的超链接。
Value 值数据集
这是一个特殊的图表数据集实现,包含单个值,用于呈现仪表和温度计图表。该值使用 <valueExpression> 表达式收集。
图表绘图
所有图表类型中另一个常见的 JRXML 元素是 <plot> 元素。这使我们能够定义图表的几个特征,如方向和背景颜色。绘图因图表类型而异。
Plot 绘图属性
下表总结了 <plot> 元素的属性 −
属性 | 描述 | 值 |
---|---|---|
backcolor | 此属性定义图表的背景颜色。 | 任何六位十六进制值都是此属性的有效值。十六进制值前面必须有一个 #。 |
orientation | 此属性定义图表的方向。 | 水平、垂直 默认值为"垂直" |
backgroundAlpha | 此属性定义图表背景颜色的透明度。 | 此属性的有效值包括 0 到 1 之间的任何十进制数(含)。数字越大,背景越不透明。 默认值为"1"。 |
foregroundAlpha | 此属性定义图表前景色的透明度。 | 此属性的有效值包括 0 到 1 之间的任何十进制数(含)。数字越大,背景越不透明。 默认值为"1"。 |
labelRotation | 此属性允许 x 轴上的文本标签顺时针或逆时针旋转。此属性仅适用于 x 轴不是数字或不显示日期的图表。 | 默认值为"0.0"。 |
<plot> 元素有一个子元素 <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 内置支持多种图表类型。它们列于下方 −
pieChart − 饼图数据集和饼图图的组合。
pie3DChart − 将饼图数据集和饼图 3D 图分组。
barChart − 类别数据集和条形图的基本组合。
bar3DChart − 包装类别数据集和条形图 3D 图。
xyBarChart −支持时间段数据集、时间序列数据集和 XY 数据集,并使用条形图呈现轴和项目。
stackedBarChart − 使用来自类别数据集的数据并使用条形图呈现其内容。
stackedBar3DChart − 使用来自类别数据集的数据并使用条形 3D 图呈现其内容。
lineChart − 将类别数据集和线图分组。
xyLineChart − 将 XY 数据集和线图分组。
areaChart −类别数据集中的项目使用面积图呈现。
stackedAreaChart − 类别数据集中的项目使用面积图呈现。
xyAreaChart − 使用 XY 数据集中的数据并通过面积图呈现。
scatterChart − 使用散点图包装 XY 数据集。
bubbleChart − 将 XYZ 数据集与气泡图相结合。
timeSeriesChart − 将时间序列数据集和时间序列图分组。
highLowChart −高低数据集和高低图的组合。
candlestickChart − 使用来自高低数据集的数据,但使用特殊的烛台图。
meterChart − 使用来自仪表图的渲染选项在刻度盘上显示来自值数据集的单个值。
thermometerChart − 使用来自温度计图的渲染选项显示值数据集中的单个值。
multiAxisChart − 包含多个范围轴,所有范围轴共享一个公共域轴。
示例
为了演示图表,让我们编写一个新的报告模板 (jasper_report_template.jrxml)。在这里,我们将 <barChart> 元素添加到 <pageHeader> 部分,并将 <pieChart> 添加到 <summary> 部分。我们将以图表形式显示每个科目的得分。将其保存到目录 C:\tools\jasperreports-5.0.1\test。文件内容如下 −
<?xml version = "1.0" encoding = "UTF-8"?> <jasperReport 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" name = "jasper_report_template" pageWidth = "595" pageHeight = "860" columnWidth = "515" leftMargin = "40" rightMargin = "40" topMargin = "50" bottomMargin = "50"> <field name = "subjectName" class = "java.lang.String"/> <field name = "marks" class = "java.lang.Integer"/> <variable name = "countNumber" class = "java.lang.Integer" calculation = "Count"> <variableExpression> <![CDATA[Boolean.TRUE]]> </variableExpression> </variable> <background> <band splitType = "Stretch"/> </background> <title> <band height = "79" splitType = "Stretch"/> </title> <pageHeader> <band height = "200"> <barChart> <chart evaluationTime = "Report"> <reportElement x = "0" y = "0" width = "555" height = "200"/> <chartTitle> <titleExpression> <![CDATA["My First JR Bar Chart"]]> </titleExpression> </chartTitle> </chart> <categoryDataset> <dataset incrementType = "None"/> <categorySeries> <seriesExpression> <![CDATA[$F{subjectName}]]> </seriesExpression> <categoryExpression> <![CDATA[$F{subjectName}]]> </categoryExpression> <valueExpression> <![CDATA[$F{marks}]]> </valueExpression> </categorySeries> </categoryDataset> <barPlot isShowTickMarks = "false"> <plot/> </barPlot> </barChart> </band> </pageHeader> <columnHeader> <band height = "20" splitType = "Stretch"/> </columnHeader> <detail> <band height = "20" splitType = "Stretch"/> </detail> <columnFooter> <band height = "20" splitType = "Stretch"/> </columnFooter> <pageFooter> <band height = "20" splitType = "Stretch"/> </pageFooter> <summary> <band height = "400" splitType = "Stretch"> <pieChart> <chart evaluationTime = "Report"> <reportElement x = "135" y = "0" width = "270" height = "300"/> <chartTitle> <titleExpression> <![CDATA["My First JR Pie Chart"]]> </titleExpression> </chartTitle> </chart> <pieDataset> <dataset incrementType = "None"/> <keyExpression> <![CDATA[$F{subjectName}]]> </keyExpression> <valueExpression> <![CDATA[$F{marks}]]> </valueExpression> </pieDataset> <piePlot> <plot/> <itemLabel/> </piePlot> </pieChart> </band> </summary> </jasperReport>
上述文件的详细信息如下所示 −
用于创建条形图的 JRXML 元素是 </barChart>,位于 <pageHeader> 中。它包含一个 </chart> 子元素,该子元素包含一个 <reportElement> 子元素,用于定义图表的尺寸和位置。
条形图中的 <dataset> 元素必须包含在 <categoryDataset> 和 </categoryDataset> JRXML 元素之间。
<categoryDataset> 必须包含一个 <categorySeries> 元素。此元素定义条形图将表示哪些数据元素(在此示例中为主题名称)。
<categoryDataset>还必须包含一个元素,该元素定义如何将数据分成类别以供比较。在这里,数据由主题名称分隔。
<valueExpression> 元素定义使用什么表达式来确定图表中每个条形的值。在这里,我们使用"标记"。
对于饼图,我们使用了 <summary> 部分下的元素 <pieChart>。它包含一个 </chart> 子元素。
子元素包含一个报告表达式,指示在图表中使用什么作为键。在这里,我们使用了 subjectName。
子元素包含一个用于计算键值的表达式。在这里,我们使用了标记。
报告填充的 java 代码保持不变。文件 C:\tools\jasperreports-5.0.1\test\src\com.tutorialspoint\JasperReportFill.java 的内容如下 −
package com.tutorialspoint; 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<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.tutorialspoint\DataBean.java 的内容如下 −
package com.tutorialspoint; 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; } }
甚至文件 C:\tools\jasperreports-5.0.1\test\src\com.tutorialspoint\DataBeanList.java 的内容也需要更新,如下所示 −
package com.tutorialspoint; import java.util.ArrayList; public class DataBeanList { public ArrayList<DataBean> getDataBeanList() { ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>(); dataBeanList.add(produce("English", 58)); dataBeanList.add(produce("SocialStudies", 68)); dataBeanList.add(produce("Maths", 38)); dataBeanList.add(produce("Hindi", 88)); dataBeanList.add(produce("Scince", 78)); return dataBeanList; } /* * This method returns a DataBean object, with subjectName , * and marks set in it. */ private DataBean produce(String subjectName, Integer marks) { DataBean dataBean = new DataBean(); dataBean.setSubjectName(subjectName); dataBean.setMarks(marks); return dataBean; } }
报告生成
接下来,让我们使用常规 ANT 构建过程编译并执行上述文件。文件 build.xml(保存在目录 C:\tools\jasperreports-5.0.1\test 下)的内容如下所示。
导入文件 - baseBuild.xml 取自环境设置一章,应放置在与 build.xml 相同的目录中。
<?xml version = "1.0" encoding = "UTF-8"?> <project name = "JasperReportTest" default = "viewFillReport" basedir = "."> <import file = "baseBuild.xml" /> <target name = "viewFillReport" depends = "compile,compilereportdesing,run" description = "Launches the report viewer to preview the report stored in the .JRprint file."> <java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true"> <arg value = "-F${file.name}.JRprint" /> <classpath refid = "classpath" /> </java> </target> <target name = "compilereportdesing" description = "Compiles the JXML file and produces the .jasper file."> <taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask"> <classpath refid = "classpath" /> </taskdef> <jrc destdir = "."> <src> <fileset dir = "."> <include name = "*.jrxml" /> </fileset> </src> <classpath refid = "classpath" /> </jrc> </target> </project>
接下来我们打开命令行窗口,进入build.xml所在的目录,最后执行命令ant -Dmain-class=com.tutorialspoint.JasperReportFill(viewFullReport是默认目标),如下 −
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml clean-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.jrprint compile: [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\classes compilereportdesing: [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.tutorialspoint.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 SUCCESSFUL Total time: 19 minutes 45 seconds
上述编译的结果是,JasperViewer 窗口打开,如下面的屏幕所示 −
在这里,我们看到在页眉中创建了条形图,在摘要部分中创建了饼图。