使用 JasperReports 制作报表

使用 JasperReports 制作报表

JasperReports 是用于设计和生成报表的 Java 库。报表版式保存在 `.jrxml` 模板中,数据可来自数据库或 Java 对象,最后导出为 PDF、Excel 或 HTML。本文说明模板结构,并提供根据数据行生成报表的代码。

测试说明:编写本文所用的电脑没有 JasperReports 库,因此代码未在此运行。请按照项目文档添加依赖,并自行测试。

需要准备的东西

工作原理

示意图:.jrxml 模板与数据结合后生成 PDF
示意图:.jrxml 模板与数据结合后生成 PDF

第 1 步:设计模板

`.jrxml` 文件是 XML,定义数据字段、页眉、明细行和页脚。字段示例:

<field name="name" class="java.lang.String"/>
<field name="score" class="java.lang.Integer"/>

在 `<detail>` 区域添加引用 `$F{name}` 和 `$F{score}` 的 `textField`,用于显示每一行的值。

第 2 步:准备数据并生成报表

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import java.util.List;
import java.util.Map;

public class ReportDemo {
    public static class Row {
        private final String name;
        private final int score;
        public Row(String name, int score) { this.name = name; this.score = score; }
        public String getName() { return name; }
        public int getScore() { return score; }
    }

    public static void main(String[] args) throws Exception {
        List<Row> rows = List.of(new Row("สมชาย", 85), new Row("สมหญิง", 72));
        JasperReport report = JasperCompileManager.compileReport("scores.jrxml");
        JasperPrint print = JasperFillManager.fillReport(report, Map.of(), new JRBeanCollectionDataSource(rows));
        JasperExportManager.exportReportToPdfFile(print, "scores.pdf");
    }
}

常见错误

下一步

在报表中添加分组,例如按科目汇总,或把学校名称作为参数传入。

总结

JasperReports 将版式与数据分开。模板定义外观,代码填充数据,最后导出为所需格式。这样不必修改主要代码就能调整报表版式。