ZetCode

JasperReports CSV

最后修改日期:2024 年 2 月 12 日

JasperReports CSV 教程展示了如何从 CSV 数据源创建报告。

JasperReports 是一个开源报告库。它可以创建多种格式的报告,包括 PDF、HTML、XLS 或 CSV。JRCsvDataSource 是一个数据源实现,用于读取 CSV 流。

JasperReports CSV 示例

下面的应用程序使用 JasperReports 库从 CSV 文件创建报告。报告是 PDF 文件。

cars.csv
id,name,price
1,Audi,52642
2,Mercedes,57127
3,Skoda,9000
4,Volvo,29000
5,Bentley,350000
6,Citroen,21000
7,Hummer,41400
8,Volkswagen,21600
9,BMW,36600

cars.csv 包含我们报告中使用的数据。

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"/>
    <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.Integer">
                    <![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>

</jasperReport>

这是报告模板文件。模板包含两个区域:columnHeader 和 detail。

<field name="id" class="java.lang.Integer"/>
<field name="name"/>
<field name="price" class="java.lang.Integer"/>

模板中有三个字段。字段映射到数据源的元素。在我们的例子中,字段映射到 CSV 列名。

<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>

文本字段是一个具有关联表达式的元素,该表达式在数据源的每次迭代中进行计算以获取文本内容。此文本字段显示汽车的名称。详细信息区域中的文本字段是针对数据源中的每条记录进行计算的。由于 CSV 文件中有九条记录,因此该文本字段将被计算九次。

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.JRCsvDataSource

def xmlFile = "report.xml"
def jrReport = JasperCompileManager.compileReport(xmlFile)

// def columnNames = ["id", "name", "price"] as String[]

def fileName = "cars.csv"
def ds = new JRCsvDataSource(fileName)
ds.setUseFirstRowAsHeader(true)
// ds.setColumnNames(columnNames)

def params = [:]
def jrPrint = JasperFillManager.fillReport(jrReport, params, ds)

JasperExportManager.exportReportToPdfFile(jrPrint, "report.pdf")

代码示例生成 PDF 报告。

def xmlFile = "report.xml"
def jrReport = JasperCompileManager.compileReport(xmlFile)

XML 模板文件被编译成一个 JasperReportJasperReport 是一个已编译的模板,可以填充数据。

def fileName = "cars.csv"
def ds = new JRCsvDataSource(fileName)
ds.setUseFirstRowAsHeader(true)

JRCsvDataSource 是一个从 CSV 文件读取数据的数据源实现。使用 setUseFirstRowAsHeader 方法,我们告诉 Jasper 将第一行用作标题。或者,我们也可以使用 setColumnNames 方法。

def jrPrint = JasperFillManager.fillReport(jrReport, params, ds)

使用 JasperFillManager.fillReport 方法,我们创建了一个 JasperPrint 对象;一个可以查看、打印或导出为其他格式的对象。

JasperExportManager.exportReportToPdfFile(jrPrint, "report.pdf")

JasperExportManager.exportReportToPdfFile 方法将 JasperPrint 对象转换为 PDF 文件。

在本文中,我们使用 JasperReports 库从 CSV 文件创建了一个报告。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 JasperReports 教程