はじめに | |
| |
ここで第2回の説明を思い出して、頭の中を整理していただきたいと思います。実際の帳票出力処理はJasperReportsが行っていますので、アプリケーションに組み込む場合はiReportで作成したテンプレートXMLとJasperReportsを利用することになります。 | |
JasperReportsのデータ変換 | |
組み込み方法の説明の前に、JasperReportsのデータ変換の流れについて説明します。JasperReportsでは以下の図のように3段階のステップを経て帳票を出力しており、それぞれのステップの状態をファイルに保存しておくこともできます。例えば、動的なデータのバインドが不要な帳票であれば、あらかじめ(3)の.jrprintファイルを用意しておくことで、出力にかかる時間を短縮することができます。逆に、毎回コンパイルから行うようなコーディングをすると、必要以上にリソースを消費し、処理時間も長くなります。 | |
PDF出力 | |
それではJasperReportsを使用した出力プログラムについて見て行きましょう。第3回で作成した見積書を顧客名付きで出力するプログラムについて説明します。なお、ここで紹介するプログラムの白文字部分は環境に応じて変更してください。 見積書を顧客名付きで出力 | |
import java.sql.*; | |
上記のプログラムを実行すると、第3回に作成した見積書が出力されます。このプログラムでは、先ほど説明した流れが分かりやすいように、コンパイル、バインド、出力の全ステップをプログラムで行っています。 | |
出力した見積書 (35.2 KB) 上記のプログラムから作成したものです。こちらを参考にしながら作成してみてください。 | |
(1)テンプレートXMLのコンパイル |
テンプレートXMLを読み込んでJasperReportオブジェクトを生成しています。結果を.jasperファイルへ出力する場合は、"JasperCompileManager.compileReportToFile()"を使用します。 |
(2)パラメータの生成 |
(4)データの動的バインドで使用するパラメータを生成しています。今回のプログラムでは、見積書の宛て名部分で使用する"CLIENT_NAME"というパラメータを設定しています。 |
(3)データソースの生成 |
(4)データの動的バインドで使用するデータソースを生成しています。今回はJDBCをデータソースとして使用するので、JDBCのコネクションを生成しています。 |
(4)データの動的バインド |
JasperReportオブジェクトに(2)、(3)で作成したデータをバインドして帳票のイメージを作成しています。コンパイル済みの.jasperファイルを読み込んでデータをバインドする場合は、"JasperFillManager.fillReport()"の第1引数に.jasperファイルのパスを指定します。 また、バインドした結果を.jrprintファイルに出力する場合は、"JasperFillManager.fillReportToFile()"を使用します。 |
(5)PDFへ出力 |
バインドした結果のJasperPrintオブジェクトと出力先のパスからPDFを出力しています。なお、.jasperファイルを読み込んで出力する場合は、以下のようにシンプルに記述できます。 JasperPrintからPDFを出力 |
import java.sql.*; |
その他の出力形式 | ||||||||||||||||||||||||
PDFへの出力については分かっていただけたと思いますので、その他の出力方法について説明します。JasperReportsでは出力形式ごとに出力処理クラス(Exporter)と、出力時のオプションを指定するための出力パラメータクラス(ExporterParameter)が用意されています。PDF出力の例では出力処理クラスは出てきませんでしたが、出力処理で内部的に利用されています。以下の表に出力処理クラスと出力パラメータクラスの一覧をしめします。 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
出力処理クラスの基本的な使い方は、どの出力処理クラスでもそれほど変わりませんので、プリンタ出力の場合を例にとって説明します。 プリンタ出力 | ||||||||||||||||||||||||
// データの動的バインド | ||||||||||||||||||||||||
(1)プリンタ用出力クラスの生成 | ||||||||||||||||||||||||
出力形式に応じて、対応する出力処理クラスを生成します。 | ||||||||||||||||||||||||
(2)出力対象のJasperPrintの設定 | ||||||||||||||||||||||||
出力処理クラスを使用して出力するJasperPrintオブジェクトを設定します。 | ||||||||||||||||||||||||
(3)印刷プリンタをプリンタ名で指定 | ||||||||||||||||||||||||
ここが出力処理クラスを使用するときのポイントとなる部分です。今回はプリンタから印刷するため、JRPrintServiceExporterParameterのパラメータを指定しています。このように出力処理クラスにどのようなパラメータを渡すかで、出力処理クラスの振る舞いを変更することができます。これだけだとイメージが掴みづらいかもしれませんので、以下にもうひとつパラメータ設定の例をしめします。 パスワード付きPDFの出力 | ||||||||||||||||||||||||
// Exporterの生成 | ||||||||||||||||||||||||
なお、プリンタの指定で悩む場合が多いようですので、現在設定されているプリントサービス情報を表示するプログラムを以下にしめします。悩んだときはこちらの出力結果を参考にしてください。 プリントサービス情報の出力 | ||||||||||||||||||||||||
import javax.print.*; | ||||||||||||||||||||||||
(4)出力の実行 | ||||||||||||||||||||||||
設定したJasperPrintやパラメータの内容に従い出力を実行します。 |
Webアプリケーションへの組み込み | |
| |
基本的な流れは今まで説明してきた内容と変わりませんので、ポイントとなる部分についてのみ説明します。 Webアプリケーションへの組み込み方法 | |
// (1)byte[]としてPDFを生成 | |
(1)byte[]としてPDFを生成 | |
ストリームに対して書き込むために、byte[]としてPDFを生成します。 | |
(2)出力設定 | |
この部分は通常のサーブレットと同様にコンテンツのタイプとデータ長を設定しています。 | |
(3)生成したbyte[]を出力 | |
生成した"ServletOutputStrem"に対して作成したbyte[]を書き込みます。 | |
まとめ | |
今回でiReportの説明は終了ですが、いかがでしたでしょうか。定型の帳票であれば、かなりの範囲がiReportでカバーできる事がお分かりいただけたのではないかと思います。次回からは、iReportのグラフ出力にも使われているJFreeChartというJavaからグラフを生成するためのライブラリについて説明します。 |