JasperReports noData
last modified February 12, 2024
JasperReports noData tutorial shows how to generate report when no data is available.
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.
JasperReports noData section
The noData
section can be used in a report when the datasource is
empty. When there is no data, JasperReports generates a blank page.
To generate the noData
section with empty datasource, we define
the section in the report and set the whenNoDataType
of the
jasperReport
tag to NoDataSection
.
(The default is BlankPage
).
JasperReports noData example
The following application generates the noData
section when there
is an empty datasource.
<?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" whenNoDataType="NoDataSection" name="report" topMargin="20" bottomMargin="20"> <field name="id" class="java.lang.Long"/> <field name="name"/> <field name="price" class="java.lang.Integer"/> <detail> <band height="15"> <textField> <reportElement x="0" y="0" width="50" height="15"/> <textElement textAlignment="Right" verticalAlignment="Middle"/> <textFieldExpression class="java.lang.Long"> <![CDATA[$F{id}]]> </textFieldExpression> </textField> <textField> <reportElement x="150" y="0" width="100" height="15" /> <textElement textAlignment="Left" verticalAlignment="Middle"/> <textFieldExpression class="java.lang.String"> <![CDATA[$F{name}]]> </textFieldExpression> </textField> <textField> <reportElement x="200" y="0" width="100" height="15" /> <textElement textAlignment="Right" verticalAlignment="Middle"/> <textFieldExpression class="java.lang.Integer"> <![CDATA[$F{price}]]> </textFieldExpression> </textField> </band> </detail> <noData> <band height="15"> <staticText> <reportElement x="0" y="0" width="200" height="15"/> <box> <bottomPen lineWidth="1.0" lineColor="#CCCCCC"/> </box> <textElement /> <text><![CDATA[The report has no data]]></text> </staticText> </band> </noData> </jasperReport>
This is the report template file. The template contains the detail
band and the noData
band. The former is generated when there is
some data, the latter when there is no data.
<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" whenNoDataType="NoDataSection" name="report" topMargin="20" bottomMargin="20">
The whenNoDataType
attribute is set to NoDataSection
.
By default, the attribute is set to blankPage
.
<noData> <band height="15"> <staticText> <reportElement x="0" y="0" width="200" height="15"/> <box> <bottomPen lineWidth="1.0" lineColor="#CCCCCC"/> </box> <textElement /> <text><![CDATA[The report has no data]]></text> </staticText> </band> </noData>
The noData
contains a static text that is displayed in case
there is no data. The static text says: The report has no data.
@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 data = [ 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 empty = [] def xmlFile = "report.xml" def jrReport = JasperCompileManager.compileReport(xmlFile) def ds = new JRBeanCollectionDataSource(empty) def params = [:] def jrPrint = JasperFillManager.fillReport(jrReport, params, ds) JasperExportManager.exportReportToPdfFile(jrPrint, "report.pdf")
We have two lists; one of them is empty. Depending on which container we pass to
the JRBeanCollectionDataSource
, the report either generates data
from the detail band or the message The report has no data.
In this article we have presented the noData
section of
JasperReports.