1. はじめに
JavaプロジェクトでJasperによる帳票出力方法についてまとめたメモ。
2. Jasper Studioインストールと設定
帳票テンプレート(jrxml)を作成するためにjrxml編集ツールをインストールする必要がある。
編集ツールの利用方法は下記の2通り。
- Jasper Studioを利用する(リンク)
- IDEにJasperプラグインをインストールする
今回はEclipseのJasperプラグインを利用することにする。
Eclipseへのプラグインインストール方法はJaspersoftのコミュニテイーページに記載されているため、ここでのインストール手順は省略する。
※2021/5時点の最新バージョンは6.17.0である。最新版を利用する場合はインストール手順3のリンクを「 https://sourceforge.net/projects/jasperstudio/files/updatesite/6.17.0/ 」に変更すること。
3. 依存ライブラリの設定
Javaプロジェクトに依存ライブラリを追加する。
今回はMavenを利用しているため、Mavenプロジェクトのpom.xml
に下記設定を追加する。
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.17.0</version>
</dependency>
4. とりあえずPDFを出力してみる
まず第一段階としてjrxmlのテンプレート作成からJava側でのPDFファイル出力をやってみる。
4.1 Jasperテンプレートの作成
Javaプロジェクトの任意のフォルダで右クリックし「New」⇒「Other...」からJaspersoft Studio
のJasoer Report
を選択しjrxmlファイルをプロジェクトに追加する。
jrxmlファイルを開くと下記画面が表示されるので、静的テキストを追加する。
Palette
からStatic Text
を選択し、ドラッグ&ドロップでエディタ画面に配置する。
配置後、右クリックで「Show Properties」を選択しテキストの編集画面を表示させ、Static Text
でフォントや文字サイズを設定する。
その後、緑丸のボタンを押すことでjrxmlをコンパイルし、jasperファイルを作成する。
4.2 PDF出力の実装
String jasperFilePath = getClass().getResource("/META-INF/jasper-template.jasper").getPath();
HashMap<String, Object> parameterMap = new HashMap<String, Object>();
JasperPrint jasperPrint= JasperFillManager.fillReport(jasperFilePath, parameterMap, new JREmptyDataSource());
JasperExportManager.exportReportToPdfFile(jasperPrint, "jasper.pdf");
上記の実装でMavenプロジェクト直下にjasper.pdf
が作成されたので、第一段階はゴール。
5. 帳票テンプレート作成からPDF出力
出力したい帳票のイメージは下図のとおり。
5.1 帳票データEntityクラスの作成
プロジェクトに帳票項目のEntityクラスを追加する。
@Getter
@Setter
@AllArgsConstructor
public class TableEntity {
private int columnNo;
private String param01;
private String param02;
private int param03;
}
5.2 帳票テンプレートの作成
帳票テンプレートを作成する。
- ①:
Outline
のFields
からフィールドを追加する。-
Fields
を右クリックし「Create Field」を選択する。 - 作成したフィールドの「Show Properties」を選択しフィールド名および「5.1 帳票テーブルデータEntityクラスの作成」で定義した変数の型を指定する。
-
- ②:
Outline
のColumn Header
にテーブルのカラム部をDetail
に出力項目を追加する。- ①で作成したフィールドをドラッグ&ドロップでjrxml編集画面にに配置する。
-
Static Text
とField
の両方が画面上に置かれるため、位置を調整する。 - 枠線や文字位置の調整は
Properies
から調整する。
- ③:
Outline
からColumn Footer
/Page Footer
/Las Page Footer
を削除する。- 右クリックで
Delete
を選択する。
- 右クリックで
- ④:
Palette
からStatic Text
を選択しSummary
に配置後、表示文字を編集し「Sum」とする。 - ⑤:
Palette
から「Create Parameter」で新規パラメータを作成し、Summary
のStatic Text
「Sum」の横に配置する。- パラメータ名を
sum
に設定し、Classに数値型を設定する。
- パラメータ名を
Sumの部分はJasper側で計算して出力することも可能(リンクを参照)だが、メンテナンス性やバグの解析の手間を考えると処理はJava側に寄せたほうが良いので、Java側でParameter03の合計値を計算してParameter
に埋め込む方針とする。
5.2 帳票PDF出力処理の実装
帳票出力Javaプロジェクトに下記クラスト処理を追記する。
- 帳票作成処理部分
//jasperファイルのパス取得
String jasperFilePath = getClass().getResource("/META-INF/jasper-template2.jasper").getPath();
//帳票データ作成
TableEntity te01 = new TableEntity(1, "XX", "XX", 100);
TableEntity te02 = new TableEntity(2, "YY", "YY", 200);
TableEntity te03 = new TableEntity(2, "ZZ", "ZZZ", 3000);
List<TableEntity> list= new ArrayList<TableEntity>();
list.add(te01);
list.add(te02);
list.add(te03);
//Collectionデータソースの設定
JRBeanCollectionDataSource jrBeanCollectionDataSource = new JRBeanCollectionDataSource(list);
//parameterの設定
HashMap<String, Object> parameterMap = new HashMap<String, Object>();
parameterMap.put("author", "Test Author");
parameterMap.put("createDate", "2021/05/21");
parameterMap.put("sum", te01.getParam03() + te02.getParam03() + te03.getParam03());
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperFilePath, parameterMap, jrBeanCollectionDataSource);
JasperExportManager.exportReportToPdfFile(jasperPrint, "jasper.pdf");
上記実装でイメージ通りの帳票PDFが出力された。
また、現時点では日本語(マルチバイト文字)はPDF化した際に表示されないので、こちらの内容を参考にフォント設定を行う必要がある。
に続く