JasperReports sort data
last modified February 12, 2024
In this article we show how to sort data in a report created with
JasperReports library. The sortField
tag is used to sort data.
JasperReports is an open-source reporting library. It can create reports in various formats including PDF, HTML, XLS, or CSV. JasperReports creates page-oriented, ready-to-print documents in a simple and flexible manner.
JasperReports sort data example
The following application loads data from a bean collection data source and creates a report from it with JasperReports library. The report is a PDF file.
<?xml version = "1.0" encoding = "UTF-8"?> <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> <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"> <style name="textRight" hAlign="Right" vAlign="Middle"/> <field name="id" class="java.lang.Long"/> <field name="name"/> <field name="price" class="java.lang.Integer"/> <sortField name="name" order="Descending"/> <detail> <band height="15"> <textField> <reportElement x="0" y="0" width="50" height="15"/> <textElement/> <textFieldExpression class="java.lang.Long"> <![CDATA[$F{id}]]> </textFieldExpression> </textField> <textField> <reportElement x="150" y="0" width="100" height="15"/> <textElement/> <textFieldExpression class="java.lang.String"> <![CDATA[$F{name}]]> </textFieldExpression> </textField> <textField> <reportElement x="200" y="0" width="100" height="15" style="textRight"/> <textElement/> <textFieldExpression class="java.lang.Integer"> <![CDATA[$F{price}]]> </textFieldExpression> </textField> </band> </detail> </jasperReport>
This is the report template file. The template contains only the detail band. In a detail band, each element is repeated for every record provided by the data source.
<sortField name="name" order="Descending"/>
With the sortField
tag, we sort the data by name
field
in descending order.
<textField> <reportElement x="150" y="0" width="100" height="15"/> <textElement/> <textFieldExpression class="java.lang.String"> <![CDATA[$F{name}]]> </textFieldExpression> </textField>
The name
field is shown in the textField
tag with the
$F{}
expression.
@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.JasperFillManager import net.sf.jasperreports.engine.JasperExportManager import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource import groovy.transform.Immutable @Immutable class Car { Long id; String name; int price; } def cars = [ new Car(1L, 'Audi', 52642), new Car(2L, 'Mercedes', 57127), new Car(3L, 'Skoda', 9000), new Car(4L, 'Volvo', 29000), new Car(5L, 'Bentley', 350000), new Car(6L, 'Citroen', 21000), new Car(7L, 'Hummer', 41400), new Car(8L, 'Volkswagen', 21600), ] def xmlFile = "report.xml" def jrReport = JasperCompileManager.compileReport(xmlFile) def ds = new JRBeanCollectionDataSource(cars) def params = [:] def jrPrint = JasperFillManager.fillReport(jrReport, params, ds) JasperExportManager.exportReportToPdfFile(jrPrint, "report.pdf")
In the Groovy file, we pass a list of Car
objects to the report.
def xmlFile = "report.xml" def jrReport = JasperCompileManager.compileReport(xmlFile)
We compile the XML template file into a JasperReport
.
JasperReport
is a compiled template ready to be filled with data.
def cars = [ new Car(1L, 'Audi', 52642), new Car(2L, 'Mercedes', 57127), new Car(3L, 'Skoda', 9000), new Car(4L, 'Volvo', 29000), new Car(5L, 'Bentley', 350000), new Car(6L, 'Citroen', 21000), new Car(7L, 'Hummer', 41400), new Car(8L, 'Volkswagen', 21600), ]
A list of cars is our data.
var ds = new JRBeanCollectionDataSource(cars);
JRBeanCollectionDataSource
is a data source implementation
that wraps a collection of Java bean objects. We put four Car
beans into the data source.
def ds = new JRBeanCollectionDataSource(cars)
A JasperPrint
object is created; an object that can be viewed,
printed, or exported to other formats.
JasperExportManager.exportReportToPdfFile(jrPrint, "report.pdf")
The JasperExportManager.exportReportToPdfFile
method exports the
JasperPrint
into a PDF file.
In this article we have created a PDF file report with sorted data.