JasperReports noData
最后修改日期:2024 年 2 月 12 日
JasperReports noData 教程展示了如何在没有可用数据时生成报告。
JasperReports 是一个开源报告库。它可以创建各种格式的报告,包括 PDF、HTML、XLS 或 CSV。JasperReports 创建面向页面、可直接打印的文档。
JasperReports noData 部分
当数据源为空时,可以在报告中使用 noData
部分。当没有数据时,JasperReports 会生成一个空白页。要生成带有空数据源的 noData
部分,我们在报告中定义该部分,并将 jasperReport
标签的 whenNoDataType
设置为 NoDataSection
。(默认是 BlankPage
)。
JasperReports noData 示例
下面的应用程序在数据源为空时生成 noData
部分。
report.xml
<?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>
这是报告模板文件。该模板包含 detail
带和 noData
带。前者在有数据时生成,后者在没有数据时生成。
<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">
whenNoDataType
属性设置为 NoDataSection
。默认情况下,该属性设置为 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>
noData
包含一个静态文本,在没有数据的情况下会显示该文本。静态文本是:报告没有数据。
report.gvy
@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")
我们有两个列表;其中一个列表是空的。根据我们传递给 JRBeanCollectionDataSource
的容器,报告要么从 detail 带生成数据,要么显示消息 报告没有数据。
在本文中,我们介绍了 JasperReports 的 noData
部分。