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 作为数据源。