JasperReports 数据排序
最后修改日期:2024 年 2 月 12 日
在本文中,我们将介绍如何在使用 JasperReports 库创建的报告中排序数据。sortField
标签用于排序数据。
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" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" 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"/> <sortField name="name" order="Descending"/> <detail> <band height="15"> <textField> <reportElement x="0" y="0" width="50" height="15"/> <textElement/> <textFieldExpression class="java.lang.Long"> <![CDATA[$F{id}]]> </textFieldExpression> </textField> <textField> <reportElement x="150" y="0" width="100" height="15"/> <textElement/> <textFieldExpression class="java.lang.String"> <![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>
这是报告模板文件。模板仅包含详情带。在详情带中,每个元素都会为数据源提供的每个记录重复一次。
<sortField name="name" order="Descending"/>
使用 sortField
标签,我们按 name
字段降序排序数据。
<textField> <reportElement x="150" y="0" width="100" height="15"/> <textElement/> <textFieldExpression class="java.lang.String"> <![CDATA[$F{name}]]> </textFieldExpression> </textField>
name
字段在 textField
标签中使用 $F{}
表达式显示。
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 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")
在 Groovy 文件中,我们将 Car
对象列表传递给报告。
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), ]
汽车列表是我们的数据。
var ds = new JRBeanCollectionDataSource(cars);
JRBeanCollectionDataSource
是一个数据源实现,它包装了一系列 Java bean 对象。我们将四个 Car
bean 放入数据源中。
def ds = new JRBeanCollectionDataSource(cars)
创建了一个 JasperPrint
对象;这是一个可以查看、打印或导出到其他格式的对象。
JasperExportManager.exportReportToPdfFile(jrPrint, "report.pdf")
JasperExportManager.exportReportToPdfFile
方法将 JasperPrint
导出为 PDF 文件。
在本文中,我们创建了一个带有排序数据的 PDF 文件报告。