JasperReport 6 と Java を使って PDF を出力しました。試行錯誤しまくりました。忘れないように、一連の手順をメモしておきます。
目次
- (1) JasperReports とはなんぞ ~ 帳票に埋め込むデータを準備する
- (2) 帳票レイアウトを作成する
- (3) Java プログラムから PDF を出力する
- (4) 日本語が出力できるようにする ~PDF にフォントを埋め込まない編~
- (5) 日本語が出力できるようにする ~PDF にフォントを埋め込む編~
- (6) ★おまけ★ スタイルを一括指定する
JasperReports とはなんぞ
JasperReports は、帳票および BI ツール群です。企業に蓄えられたたくさんのデータを加工して、場合によっては帳票化して、ビジネスの分析に役立てよう!というものです。
帳票を作成するためのライブラリである JasperReports Library、帳票レイアウト ファイルを作成するための Jaspersoft Studio という GUI アプリケーション、帳票の管理などが行える Jaspersoft Server などで構成されます。帳票は、入力データとして各種データベースや Excel 、CSV などを使うことができ、また PDF、Excel、HTML など、いろいろな形式で出力できるようです。
BI ツールというと、なんか仰々しくて構えてしまうんですが (私だけ?)、ちょっとした帳票を出力するだけの目的にも問題なく使えます。
ちなみに、JasperReports のことを Web で検索すると、しつこいぐらい iReport という名前が出てくるのですが、どうやら iReport を新しくEclipse ベースに移植したものが Jaspersoft Studio とのことです。[古]iReport→[新]Jaspersoft Studio ということみたいです。iReport の方は 2015 年末に開発・保守を停止する予定らしいので、これから使うのなら、Jaspersoft Studio がいいのかな。Jaspersoft 社が TIBCO 社に合併されたので、Jaspersoft Studio は、正式には TIBCO Jaspersoft Studio といいます。が、長いので、本ページでは Jaspersoft Studio と表記しています。
環境
- OS: Windows 7 Home Premium Service Pack 1 (64 ビット版)
- 言語: Java 8 (JRE 1.8)
- サーブレット コンテナー: Tomcat 8.0.20
- 統合開発環境: Eclipse 4.4.2
- Jaspersoft Studio 6.0.3
方針・前提条件
- 適当なデータが埋め込まれた PDF を生成し、ブラウザーで表示します。
- 帳票のデザイン (美しさとか) は、重視しません。とにかく表示するのを目標とします。
- 帳票に表示するデータは、お手軽に CSV ファイルから取得することとします。(データベース接続とか、難しそうなんだもの…。準備もめんどいし…。)
- Tomcat 関連の設定は完了していることとします。また、Web アプリケーションとしての最低限のフォルダー構成 (WEB-INF フォルダーなど) は、作成済みとします。
- PDF を作成する際、ファイル化すると後で消すのが面倒そうなので、バイナリ (バイト配列) として作成し、直接 HTTP のレスポンスとして返します。
JasperReports では、PDF の出力部分は iText というライブラリーで処理されています。 JasperReports 6 では iText のバージョン 5 が使用されていますが、このバージョンは AGPL ライセンスとなっています。ただ、JasperReports の API を経由して使用される場合には、特例として LGPL ライセンスでの使用が可能であるようです。
しかしながら、ライセンス関連につきまして、私の方で責任を負いかねますので、使用される方の自己責任にてお願いします。
参考
処理の流れをざっくりと
「CSV ファイル」「帳票レイアウト ファイル」「プログラム」の 3 つの準備が必要です。また、日本語を出力するためには、設定をゴニョゴニョする必要があります。これらについて、ひとつずつ説明しています。
帳票に埋め込むデータを準備する
適当な内容の CSV ファイルを用意します。今回は、お寿司屋さんのメニューのデータを作りました。ファイル名は「SushiMenuData.csv」としました。列を特定するために、1 行目にヘッダーを入れておきます。(とあるお寿司屋さんの Web サイトから、一部抜粋させていただきました。回し者ではないです(・д・`))
SushiMenuData.csv
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
CATEGORY,NAME,PRICE,CALORIES にぎり,【天然】熟成まぐろ,100,88 にぎり,【天然】漬けまぐろ,100,88 にぎり,【天然】ビントロ,100,83 にぎり,真だい,100,100 にぎり,はまち,100,118 にぎり,【天然】真いわし,100,122 にぎり,サーモン,100,92 にぎり,オニオンサーモン,100,122 にぎり,焼きはらす,100,93 にぎり,とろサーモン,100,83 にぎり,真いかジュレポン酢,100,78 にぎり,サーモンジュレポン酢,100,106 にぎり一貫(極旨一貫),【天然】あじ(一貫),100,54 にぎり一貫(極旨一貫),まぐろユッケ手巻き(一貫),100,94 にぎり一貫(極旨一貫),めかじきステーキ風(一貫),100,119 にぎり一貫(極旨一貫),【宇和島産】みかんぶり(一貫),100,68 にぎり一貫(極旨一貫),熟成 中とろ(一貫),100,65 にぎり一貫(極旨一貫),熟成 大とろ(一貫),200,83 にぎり一貫(極旨一貫),宝石生えび(一貫),100,45 ぐんかん,生しらす,100,106 ぐんかん,【くら特製】ねぎまぐろ,100,119 ぐんかん,【くら特製】まぐろユッケ,100,142 ぐんかん,【くら特製】味付いくら,100,94 ぐんかん,【くら特製】サラダ,100,161 ぐんかん,【くら特製】ツナサラダ,100,171 ぐんかん,7種のシーフードサラダ,100,165 ぐんかん,カラフトししゃもっこ,100,95 ぐんかん,瀬戸内しらすの黄金炊き,100,109 あぶり寿司・細巻き,あぶりサーモンてりマヨ,100,127 あぶり寿司・細巻き,あぶりチーズ豚カルビ,100,148 あぶり寿司・細巻き,鉄火巻,100,136 あぶり寿司・細巻き,きゅうり巻,100,120 あぶり寿司・細巻き,納豆巻,100,160 あぶり寿司・細巻き,かんぴょう巻,100,134 サイドメニュー,『特製玉子だれで食べる』魚介海鮮丼,680,576 サイドメニュー,イベリコ豚丼,400,601 サイドメニュー,7種の魚介醤油らーめん(関西),360,329 サイドメニュー,7種の魚介醤油らーめん(関東),360,329 サイドメニュー,きつねうどん,280,292 サイドメニュー,かけうどん(平日限定),130,227 サイドメニュー,チョコケーキ(関西),100,106 サイドメニュー,チョコケーキ(関東),100,106 サイドメニュー,フォンダン・ショコラムース,100,99 サイドメニュー,ニューヨークチーズケーキ,200,198 サイドメニュー,プレミアアイス珈琲,150,36 サイドメニュー,プレミアアイスラテ,150,94 サイドメニュー,季節のパイン,100,42 |
CSV ファイルを、Tomcat プロジェクトの任意の場所に配置します。今回は、以下のように配置しました。
これで、データの準備は完了です。次は、帳票レイアウトを作成します。