はじめに | |
![]() | |
| |
第1回の今回は電子帳票の全体像に触れ、第2回以降では実際に使用している技術要素について説明します。なお、本連載ではOSS電子帳票の実現手段として、表1のツールを取り上げていく予定です。 | |
| |
表1:OSS電子帳票ツール | |
本連載が、ユーザにとって高付加価値、低価格のシステムを実現する一助となれば幸いです。 | |
帳票とは | |
帳票といった場合に、あなたは何をイメージするでしょうか。一般的には、発注書や請求書などのように最終的には紙媒体として出力するようなデータをイメージする人が多いと思いますが、最近では紙媒体に限らず「流通している様々な情報を整理してまとめたもの」といった意味で使われることが多く、HTMLやPDF、Excel、メール、FAXなども含みます。つまり、出力された物を人間が確認するようなシステムには必ず帳票が存在するというわけです。 また帳票は、請求書、発注書、受注書などの定型のものと、分析系の非定型なものとに2分でき、それぞれの目的によって適した表示形式も変わってきます。 | |
![]() | |
定型帳票 | |
請求書、発注書、受注書など決まったフォーマットで出力される帳票は、用途も明確なためイメージしやすいかと思います。定型帳票ではあらかじめ罫線や静的な文言などの定型部分をテンプレートとして用意しておき、中身のデータをデータベースなどの外部リソースから取得するといった方法で出力します。 後ほど紹介する、「不動産物件管理システム」も定型帳票の例になります。 | |
非定型帳票 | |
主に分析に使われる非定型の帳票は、分析の目的やどのような切り口で分析するかによって形式も千差万別で、データ量や教育にかけられる時間も加味して実現方法を検討する必要があります。データ量が多く、様々な分析を行うのであればOLAPツールを使用した方が良いでしょうし、データ量がそれほど多くなければExcelで出力してピボットテーブル、ある程度決まったパターンのみであればテンプレートとグラフを使用する等の方法が考えられます。同一のシステムでも、管理者や担当者、ユーザによっては上記パターンを組み合わせた方が良いこともあるかと思います。 後ほど紹介する、「コンサルタント会社請求管理システム」は非定型帳票の例になります。 |
(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からグラフを生成するためのライブラリについて説明します。 |