Java
springframework
spring-mvc
JasperReports

SpringMVCとJasperReportsで帳票を印刷してみた2/3(帳票テンプレート作成編)

前回の記事

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

参考ー
https://amg-solution.jp/blog/1519

※この記事は長いです。

JasperReportがPDFを出力するまで

JasperReportは以下の流れで帳票をPDFにします。

帳票テンプレートを読み込む

テンプレートをコンパイル

テンプレートにデータを埋め込み

PDFファイルとして出力

という訳で最初に型となるテンプレートファイルを作りましょう

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

※Mavenプロジェクトがあって、Spring-MVCが動いている前提です。

まず、resource下にreportというフォルダを作り(名前はなんでもいいです)を右クリック!
新規からJasperReportsをクリック

image.png

Blank_A4のテンプレートを使いましょう。
Blank A4をクリックして次へ、ファイル名を入力して次へ

DataAdapterOne Empty Recordをクリックして次へ。
JasperReportはDBから直接データを持ってくる機能を持っています。
でも大抵はJavaで加工して使いたいですよね。
なので空の設定を行います。

image.png

Congratulationsの表示が出たらウィザード完了です!

"Band"を把握する

こんな画面が出てきたと思います。

image.png

これはバンドと呼ばれるページの構成です。
タイトルがページの上部にあり、ページヘッダーとページフッダーはページの最初と最後に必ず出力されます。本文はDetail 1に出力されます。

ここはチュートリアルに乗っ取り、余計なバンドを削除しましょう。

アウトラインからPage_Headerを右クリックしdeleteしましょう。

画面に固定文字を配置する

JasperReportの基本の使い方は簡単です。

画面右のStatic Textを画面にドラッグしてみましょう。

image.png

これで固定のテキストが出来ました。
これの日本語を表示してみます。

テキストをクリックして、プロパティビューを見ます。
このプロパティから、このエレメント(って言います)を操作します。
プロパティの中のStaticTextタブを開きTextを変更しましょう。
変更したら日本語フォントに変更します FontをIPAexgに変更

image.png

次に日付や顧客名を入れてみましょう。

画面に”動的な文字”(パラメーター)を配置する

次に日付や顧客名を入れたいと思います。
日付や顧客名は、印刷する度に変化するので、Javaからの制御が必要です。JasperReportでは、Javaから値を受け取るのにパラメーターという入れ物を用意しています。早速作ってみましょう。

パラメーターを作成する

アウトラインからParametersを開いてみましょう
image.png

この右枠の一覧が、テンプレートが持ってるデフォルトパラメーターです。今回、新しく顧客名と日付を用意したいので、Client_nameDate_todayというパラメーターを用意しましょう。

Parametersを右クリックしてcreate Parameterをクリック。

NameをClient_nameに変えてCtrl + sです。型はStringのままでいいでしょう。
同じようにDate_todayも作りましょう。

Text Fieldを配置する

さて、これで帳票が値を代入する準備は出来ました。しかし、これを描画する処理が出来ていません。
画面上にText Filedを配置し、パラメーターの値を描画しましょう。

画面上に2個TextFieldをドラッグしましょう

配置されたら、片方を顧客名、片方を日付にします。
TextFieldのプロパティを開きTextFieldタブを開きます。

このExpressionをパラメーターに紐付けます。
顧客名を$P{Client_name}、日付を$P{Date_today}に変更します。
こんな感じ
(こっからは省略しますけど、画面上に配置されたエレメントは全てフォントをIPAexgに変更してください。)

image.png

こんな感じになってるかな?

画面に表を配置する

それでは帳票のメイン。表を作ります。

今回

列1:商品名(String)
列2:値段(Integer)

くらいのとても簡単な表を作ります。

アウトラインのFieldを右クリックし、create Fieldをクリック

product_name(String型)とprice(Integer型)のフィールドを作ります。
※動作確認をした所、型の最初が大文字では動きませんでした。画面では大文字も入ってますが、小文字を設定しましょう。なんで(´・ω・`)

image.png

出来たらこれを選択してテンプレートにドラッグ!

image.png

(もちろん出来たフィールドもフォントを変えます。)

数値のフォーマットとかを変えてかっこよくしましょう。
TextFieldのPatternから、フォーマットを選択できます。エクセルやJavaのフォーマットと同じなのでそちらを参考に作ってみましょう。

image.png

これでサンプル帳票に必要な要素が出来ました。
あとは見栄えをもうちょっと良くしてみましょう。

image.png

こんな感じになりました。(枠線はBordersタブから資格をクリックして色をつければ大丈夫です。)

本当のビジネス文書になると始めの挨拶や結びの言葉が入ると思いますが、今回は見やすくするために省略しています。

これで帳票テンプレートは出来ました。後はこれを制御するJava側の処理を書いていきましょう

おまけ。

作った帳票はプレビューすることも出来ます。
帳票画面の下にあるタブをDesignからpreviewに切り替えてみましょう(コンパイルエラーが出るなら、帳票の時点でファイルがバグっているはずです)

パラメーターに値を記入する設定が表示されるので、好きな値を淹れてプレビューしましょう

image.png

次回に続く