LoginSignup
17
16

More than 1 year has passed since last update.

Jasper帳票PDF出力備忘メモ

Last updated at Posted at 2021-05-23

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 StudioJasoer Reportを選択しjrxmlファイルをプロジェクトに追加する。

image.png

jrxmlファイルを開くと下記画面が表示されるので、静的テキストを追加する。

image.png

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が作成されたので、第一段階はゴール。

image.png

5. 帳票テンプレート作成からPDF出力

出力したい帳票のイメージは下図のとおり。

image.png

5.1 帳票データEntityクラスの作成

プロジェクトに帳票項目のEntityクラスを追加する。

@Getter
@Setter
@AllArgsConstructor
public class TableEntity {

    private int columnNo;

    private String param01;

    private String param02;

    private int param03;
}

5.2 帳票テンプレートの作成

帳票テンプレートを作成する。

image.png

  • ①:OutlineFieldsからフィールドを追加する。
    • Fieldsを右クリックし「Create Field」を選択する。
    • 作成したフィールドの「Show Properties」を選択しフィールド名および「5.1 帳票テーブルデータEntityクラスの作成」で定義した変数の型を指定する。
  • ②:OutlineColumn Headerにテーブルのカラム部をDetailに出力項目を追加する。
    • ①で作成したフィールドをドラッグ&ドロップでjrxml編集画面にに配置する。
    • Static TextFieldの両方が画面上に置かれるため、位置を調整する。
    • 枠線や文字位置の調整はProperiesから調整する。

image.png

  • ③:OutlineからColumn Footer/Page Footer/Las Page Footerを削除する。
    • 右クリックでDeleteを選択する。
  • ④:PaletteからStatic Textを選択しSummaryに配置後、表示文字を編集し「Sum」とする。
  • ⑤:Paletteから「Create Parameter」で新規パラメータを作成し、SummaryStatic 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が出力された。

image.png

また、現時点では日本語(マルチバイト文字)はPDF化した際に表示されないので、こちらの内容を参考にフォント設定を行う必要がある。

に続く

参考

  • Jaspersoft Studioプラグインのインストール手順:リンク
  • 帳票作成に関す諸々:リンク
  • 帳票出力でJavaBeanから値を取得して出力する方法:リンク
  • パラメータとフィールドの使い方:リンク
  • Tableの使い方:リンク
  • JasperライブラリのJavaDoc:リンク
17
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16