JasperReports 过滤数据
最后修改日期:2024 年 2 月 12 日
JasperReports 过滤数据展示了如何使用 JasperReports 库创建的报表中过滤数据。过滤数据的一种方法是使用 filterExpression
标签。
JasperReports 是一个开源报告库。它可以创建各种格式的报告,包括 PDF、HTML、XLS 或 CSV。JasperReports 创建面向页面、可直接打印的文档。
JasperReports 过滤数据示例
下面的应用程序从 bean 集合数据源加载数据,并使用 JasperReports 库从中创建一个报表。该报表是一个 PDF 文件。
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"> <style name="textRight" hAlign="Right" vAlign="Middle" /> <field name="id" class="java.lang.Long"/> <field name="name"/> <field name="price" class="java.lang.Integer"/> <filterExpression> <![CDATA[$F{price} < 40000]]> </filterExpression> <detail> <band height="15"> <textField> <reportElement x="0" y="0" width="50" height="15" style="textRight"/> <textElement /> <textFieldExpression class="java.lang.Long"> <![CDATA[$F{id}]]> </textFieldExpression> </textField> <textField> <reportElement x="150" y="0" width="100" height="15"/> <textElement /> <textFieldExpression> <![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>
这是报表模板文件。模板包含 detail 带,其中每个元素都会为数据源提供的每条记录重复一次。
<filterExpression> <![CDATA[$F{price} < 40000]]> </filterExpression>
filterExpression
标签用于过滤数据。过滤表达式显示价格低于 40000 的汽车。
<textField> <reportElement x="200" y="0" width="100" height="15" style="textRight"/> <textElement /> <textFieldExpression class="java.lang.Integer"> <![CDATA[$F{price}]]> </textFieldExpression> </textField>
price
字段以 textField
标签和 $F{}
语法显示。
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.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")
在示例中,我们从 JRBeanCollectionDataSource
获取数据。
def xmlFile = "report.xml" def jrReport = JasperCompileManager.compileReport(xmlFile)
我们将 XML 模板文件编译成一个 JasperReport
。JasperReport
是一个已编译的模板,可以填充数据。
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 ds = new JRBeanCollectionDataSource(cars)
JRBeanCollectionDataSource
是一个数据源实现,它包装了一系列 Java bean 对象。我们将四个 Car
bean 放入数据源。
def jrPrint = JasperFillManager.fillReport(jrReport, params, ds)
创建了一个 JasperPrint
对象;该对象可以被查看、打印或导出为其他格式。
JasperExportManager.exportReportToPdfFile(jrPrint, "report.pdf")
JasperExportManager.exportReportToPdfFile
方法将 JasperPrint
导出为 PDF 文件。
在本文中,我们创建了一个带有过滤数据的 PDF 文件报表。