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 はレイアウトとデータを分けます。テンプレートが見た目を定義し、コードがデータを流し込み、必要な形式に書き出します。これにより、主要なコードに触れずにレポートのレイアウトを変えられます。