Learn how to create line charts in JasperReports. This tutorial provides step-by-step guidance for effective trend visualization.
last modified February 12, 2024
In this article we show how to create a line chart in JasperReports library.
JasperReports is an open-source reporting library. It can create reports in various formats including PDF, HTML, XLS, or CSV.
Line chart is a type of chart that displays values which change over time. In this chart a series of (x, y) values are drawn and connected with lines.
In the following example, we place a line chart into a report; the chart shows temperaturs over time.
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>
The line chart uses the lineChart tag.
<field name=“id” class=“java.lang.Long”/> <field name=“date”/> <field name=“val” class=“java.lang.Double”/>
We have three fields mapped to the datasource. In the chart, we use two of them: date and val.
<chartTitle position=“Top”> <titleExpression><![CDATA[“Line chart”]]></titleExpression> </chartTitle>
The title of the chart is set with chartTitle.
<categoryDataset> <dataset/> <categorySeries> <seriesExpression><![CDATA[“Temperatures”]]></seriesExpression> <categoryExpression><![CDATA[ $F{date} ]]></categoryExpression> <valueExpression><![CDATA[ $F{val} ]]></valueExpression> </categorySeries> </categoryDataset>
The $F{date} is used for the x-axis and the $F{val} for the y-axis.
<linePlot> <plot/> <categoryAxisLabelExpression><![CDATA[“Date”]]></categoryAxisLabelExpression> <categoryAxisFormat> <axisFormat/> </categoryAxisFormat> <valueAxisLabelExpression><![CDATA[“Temperature”]]></valueAxisLabelExpression> <valueAxisFormat> <axisFormat/> </valueAxisFormat> </linePlot>
In the linePlot, we can do some formatting of the chart; we add the labels for the axes.
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”)
This is the Groovy code to generate the report.
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) ]
This is the data displayed in the line chart.
def ds = new JRBeanCollectionDataSource(data)
We pass the list of data to the JRBeanCollectionDataSource.
def jPrint = JasperFillManager.fillReport(jrReport, params, ds)
The datasource is passed to the JasperFillManager.fillReport.
In this article we have created a line chart with JasperReports library.
My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.