JasperReports 折线图
最后修改日期:2024 年 2 月 12 日
在本文中,我们将展示如何在 JasperReports 库中创建折线图。
JasperReports 是一个开源的报表库。它可以创建多种格式的报表,包括 PDF、HTML、XLS 或 CSV。
折线图是一种显示随时间变化的值的图表。在此图表中,绘制一系列 (x, y) 值并用线连接。
JasperReports 折线图示例
在下面的示例中,我们将一个折线图放入报告中;该图显示了随时间变化的温度。
report.xml
<?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="report" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> <field name="id" class="java.lang.Long"/> <field name="date"/> <field name="val" class="java.lang.Double"/> <summary> <band height="450" splitType="Stretch"> <lineChart> <chart evaluationTime="Report"> <reportElement x="20" y="20" width="540" height="400"/> <chartTitle position="Top"> <titleExpression><![CDATA["Line chart"]]></titleExpression> </chartTitle> <chartSubtitle/> <chartLegend/> </chart> <categoryDataset> <dataset/> <categorySeries> <seriesExpression><![CDATA["Temperatures"]]></seriesExpression> <categoryExpression><![CDATA[ $F{date} ]]></categoryExpression> <valueExpression><![CDATA[ $F{val} ]]></valueExpression> </categorySeries> </categoryDataset> <linePlot> <plot/> <categoryAxisLabelExpression><![CDATA["Date"]]></categoryAxisLabelExpression> <categoryAxisFormat> <axisFormat/> </categoryAxisFormat> <valueAxisLabelExpression><![CDATA["Temperature"]]></valueAxisLabelExpression> <valueAxisFormat> <axisFormat/> </valueAxisFormat> </linePlot> </lineChart> </band> </summary> </jasperReport>
折线图使用 lineChart
标签。
<field name="id" class="java.lang.Long"/> <field name="date"/> <field name="val" class="java.lang.Double"/>
我们有三个字段映射到数据源。在图表中,我们使用了其中两个:date
和 val
。
<chartTitle position="Top"> <titleExpression><![CDATA["Line chart"]]></titleExpression> </chartTitle>
图表的标题使用 chartTitle
设置。
<categoryDataset> <dataset/> <categorySeries> <seriesExpression><![CDATA["Temperatures"]]></seriesExpression> <categoryExpression><![CDATA[ $F{date} ]]></categoryExpression> <valueExpression><![CDATA[ $F{val} ]]></valueExpression> </categorySeries> </categoryDataset>
$F{date}
用于 x 轴,$F{val}
用于 y 轴。
<linePlot> <plot/> <categoryAxisLabelExpression><![CDATA["Date"]]></categoryAxisLabelExpression> <categoryAxisFormat> <axisFormat/> </categoryAxisFormat> <valueAxisLabelExpression><![CDATA["Temperature"]]></valueAxisLabelExpression> <valueAxisFormat> <axisFormat/> </valueAxisFormat> </linePlot>
在 linePlot
中,我们可以对图表进行一些格式化;我们为轴添加了标签。
report.gvy
package com.zetcode @Grab(group='net.sf.jasperreports', module='jasperreports', version='6.21.0') @Grab(group='com.github.librepdf', module='openpdf', version='1.3.39') import net.sf.jasperreports.engine.JasperCompileManager import net.sf.jasperreports.engine.JasperExportManager import net.sf.jasperreports.engine.JasperFillManager import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource import groovy.transform.Immutable @Immutable class Temp { long id; String date; double val; } def data = [ new Temp(1L, "Jan 1", -7.3), new Temp(2L, "Jan 10", -3.4), new Temp(3L, "Jan 12", -5.0), new Temp(4L, "Jan 20", -0.9), new Temp(5L, "Jan 30", -2.2), new Temp(6L, "Feb 1", 4.8), new Temp(7L, "Feb 2", 5.1), new Temp(9L, "Feb 5", -1.9), new Temp(10L, "Feb 8", 0), new Temp(11L, "Feb 12", 2.6) ] def xmlFile = "report.xml" def jrReport = JasperCompileManager.compileReport(xmlFile) def ds = new JRBeanCollectionDataSource(data) def params = [:] def jPrint = JasperFillManager.fillReport(jrReport, params, ds) JasperExportManager.exportReportToPdfFile(jPrint, "report.pdf")
这是生成报表的 Groovy 代码。
def data = [ new Temp(1L, "Jan 1", -7.3), new Temp(2L, "Jan 10", -3.4), new Temp(3L, "Jan 12", -5.0), new Temp(4L, "Jan 20", -0.9), new Temp(5L, "Jan 30", -2.2), new Temp(6L, "Feb 1", 4.8), new Temp(7L, "Feb 2", 5.1), new Temp(9L, "Feb 5", -1.9), new Temp(10L, "Feb 8", 0), new Temp(11L, "Feb 12", 2.6) ]
这是折线图中显示的数据。
def ds = new JRBeanCollectionDataSource(data)
我们将数据列表传递给 JRBeanCollectionDataSource
。
def jPrint = JasperFillManager.fillReport(jrReport, params, ds)
数据源传递给 JasperFillManager.fillReport
。
在本文中,我们使用 JasperReports 库创建了一个折线图。