JasperReports Map 数据源
最后修改日期:2024 年 2 月 12 日
在本文中,我们将展示如何在 JasperReports 库中使用 JRMapArrayDataSource 和 JRMapCollectionDataSource 作为数据源。
JasperReports 是一个开源报告库。它可以创建各种格式的报告,包括 PDF、HTML、XLS 或 CSV。JasperReports 创建面向页面、可直接打印的文档。
JasperReports 有两种数据源可以处理 Map 数据。JRMapArrayDataSource
是一个包含 Map 数组数据的数据源。JRMapCollectionDataSource
是一个包含 Map 列表数据的数据源。
JasperReports Map 数据源示例
在下面的示例中,我们将从 Map 对象集合/数组生成报告。
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" name="report" topMargin="20" bottomMargin="20"> <field name="id" class="java.lang.Integer"> <fieldDescription><![CDATA[id]]></fieldDescription> </field> <field name="name"> <fieldDescription><![CDATA[name]]></fieldDescription> </field> <field name="occupation"> <fieldDescription><![CDATA[occupation]]></fieldDescription> </field> <detail> <band height="20"> <textField> <reportElement x="0" y="0" width="50" height="20"/> <textFieldExpression><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="70" y="0" width="80" height="20"/> <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="170" y="0" width="80" height="20"/> <textFieldExpression><![CDATA[$F{occupation}]]></textFieldExpression> </textField> </band> </detail> </jasperReport>
报表模板使用三个字段:id
、name
和 occupation
。
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.JRMapCollectionDataSource def users = [ ['id': 1, 'name': 'John Doe', 'occupation': 'gardener'], ['id': 2, 'name': 'Roger Roe', 'occupation': 'driver'], ['id': 3, 'name': 'Jane Doe', 'occupation': 'teacher'], ['id': 4, 'name': 'Tomas Mudry', 'occupation': 'shopkeeper'], ['id': 5, 'name': 'Paul Smith', 'occupation': 'programmer'], ['id': 6, 'name': 'Roman Nikolaj', 'occupation': 'programmer'], ['id': 7, 'name': 'Lucia Smutna', 'occupation': 'student'], ['id': 8, 'name': 'Kevin Smith', 'occupation': 'manager'], ] def xmlFile = "report.xml" def jrReport = JasperCompileManager.compileReport(xmlFile) def ds = new JRMapCollectionDataSource(users) def params = [:] def jrPrint = JasperFillManager.fillReport(jrReport, params, ds) JasperExportManager.exportReportToPdfFile(jrPrint, "report.pdf")
本示例使用 JRMapCollectionDataSource
作为数据源。
def users = [ ['id': 1, 'name': 'John Doe', 'occupation': 'gardener'], ['id': 2, 'name': 'Roger Roe', 'occupation': 'driver'], ['id': 3, 'name': 'Jane Doe', 'occupation': 'teacher'], ['id': 4, 'name': 'Tomas Mudry', 'occupation': 'shopkeeper'], ['id': 5, 'name': 'Paul Smith', 'occupation': 'programmer'], ['id': 6, 'name': 'Roman Nikolaj', 'occupation': 'programmer'], ['id': 7, 'name': 'Lucia Smutna', 'occupation': 'student'], ['id': 8, 'name': 'Kevin Smith', 'occupation': 'manager'], ]
我们定义了一个 Map 列表。每个 Map 代表用户数据。id
、name
和 occupation
键映射到模板字段。
def ds = new JRMapCollectionDataSource(users)
从 Map 对象列表中,我们创建了 JRMapCollectionDataSource
。
def jrPrint = JasperFillManager.fillReport(jrReport, params, ds)
数据源被传递给 JasperFillManager.fillReport
方法。
Map[] users = [ ['id': 1, 'name': 'John Doe', 'occupation': 'gardener'], ['id': 2, 'name': 'Roger Roe', 'occupation': 'driver'], ['id': 3, 'name': 'Jane Doe', 'occupation': 'teacher'], ['id': 4, 'name': 'Tomas Mudry', 'occupation': 'shopkeeper'], ['id': 5, 'name': 'Paul Smith', 'occupation': 'programmer'], ['id': 6, 'name': 'Roman Nikolaj', 'occupation': 'programmer'], ['id': 7, 'name': 'Lucia Smutna', 'occupation': 'student'], ['id': 8, 'name': 'Kevin Smith', 'occupation': 'Manager'], ] def ds = new JRMapArrayDataSource(users)
或者,我们也可以使用 JRMapArrayDataSource
,它接受一个 Map 数组。
在本文中,我们在 JasperReports 库中使用了 JRMapArrayDataSource 和 JRMapCollectionDataSource 作为数据源。