JasperReportsによる帳票出力【前編】
作成日: 2015年2月9日
作成者: アップクロス株式会社 西元貞昭
公開日: 2015年3月12日
■はじめに
はじめまして、アップクロス株式会社の西元です。
弊社では、広告業界や制作業界、IT業界等の案件(プロジェクト)ベースの取引をしている業態に最適化されたERP(基幹業務系システム)を提供しています。そのシステムのWebアプリケーションサーバーにColdFusionを使用しています。
ColdFusionはタグ言語ベースのため開発生産性・保守性が高く、またデータベースとの連携も容易に行える仕組みを持っています。更に、Javaで構築したクラスファイルを呼び出す事で、ColdFusion単独では難しいことをJavaと連携して実現する事も可能です。
それ故に業務系のWebシステムを構築するのにも適しているのですが、残念ながら帳票出力についてだけは力不足を感じています。汎用機が主流だった頃に比べると随分と少なくはなりましたが、それでもまだ業務システムからチェックリストや一覧表、各種集計表、売上/仕入伝票、更に請求書や見積書等の証憑を紙に印刷したいという要件は多々発生します。また、紙に印刷しないまでも、帳票イメージを画面で確認したい、PDFファイルで保存したいというケースもあります。
勿論、ColdFusionには標準で帳票イメージを作成する手段が用意されています。弊社でも一時期試行しましたが、制限事項や使い勝手の悪さ等もあり現在では使用を止めてしまいました。
とは言え、業務システムでは帳票出力が必須の機能の1つでもあり、代替手段が必要です。
幸いにも先にも述べた通り、ColdFusionでは独自のJavaクラスを呼び出す事ができますので、工夫次第で世の中に出回っている帳票生成ツールと連携する事が可能なのです。
今回、その1例としてオープンソースの帳票生成ツール「JasperReports」と連携して帳票イメージを作成する方法&サンプルを前後編に分けてご紹介させていただきます。
■サンプルの動作環境について
この記事で紹介するサンプルは、以下の実行環境を前提としています。が、他の構成やColdFusion 10, 11でもほぼそのまま利用できるかと思います。
Webサーバ
- Windows 2008 R2 Server Standard
- Microsoft IIS 7.5
- ColdFusion 9 64bit版 Standard Edition
- Oracle 11g Standard One
- Java 1.6 Runtime(JRE)
Client PC(開発用PC)
- Windows 8.1 Pro x64
- Java 1.6 JDK
- Mozilla firefox 35.0
- Adobe Reader XI
■ColdFusionでの帳票出力
ColdFusionで帳票を出力する、または印刷イメージを作成する方法として標準で以下の2種類が提供されています。
CFDocumentによるPDF出力 |
cfdocument開始タグと終了タグ内に記述されたHTMLをPDFまたはFlashPaper出力形式に変換して、ブラウザに返すかファイルに保存します。
HTML(と一部のスタイルシート)で印刷イメージを作成できるので簡単ではありますが、細やかなレイアウト調整や一覧表のページング等は出来ません。
ページに表示する情報と同等の内容を印刷(PDF化)できれば良い場合には便利な機能です。
|
CFReportを使用した帳票出力 |
指定したレポート定義を使用してPDFまたはFlashPaper形式の帳票を作成して、ブラウザに返すかファイルに保存します。
ColdFusion ReportとCrystal Reportsの2つのレポート定義に対応しています。Crystal Reportsは別途購入する必要があるため、ColdFusionだけで実現…となると、ColdFusion Report形式を使う事になります。
ColdFusion Reportを使う場合は、開発環境にColdFusion Report Builderをインストールしてレポート定義ファイル(cfr)を作成します。
ColdFusion Report Builderは、「Adobe - ColdFusionサポートセンター:その他のダウンロード」から入手できます。
帳票に出力するデータは、レポート定義ファイルに埋め込んだSQL文もしくはcfreportタグで指定したクエリーから取得されます。また、cfreportタグでパラメータ値を渡す事も可能です。
機能的には一般的な帳票ツールとほぼ同等の事ができるようですので、別途費用をかけずとも望んだ帳票が作れるでしょう。
但し、
・ColdFusion Reportに関する技術情報が少ない。
・ColdFusion Report Builderでレポート定義を修正していると偶にレイアウトが崩れてしまう事がある。
(最新バージョンでは未確認)
・Standard Editionでは同時に1スレッドしか処理できない(Enterprise editionは無制限)。
等の問題(制限)があるために、帳票出力を多用する環境で使うには少々難があります。 |
なお、これら帳票出力機能については、Adobe公式サイトのドキュメントに詳しく掛かれていますので、使い方などはそちらを参照してください。
いずれも、「ドキュメント、チャート、レポートの操作」の「印刷用のレポートとドキュメントの作成」「Report Builder を使用したレポートの作成」に記載されています。
■JasperReportsの紹介
JasperReportsは、Jaspersoft社が開発/販売しているオープンソースのJavaレポーティングエンジンです。短時間かつ安価でグラフを含む帳票を作成することができるため、海外ではデファクトスタンダードのオープンソース帳票ツールとされています。海外のソフトウェアではありますが、枠線・罫線をふんだんに使った伝票や証憑等も作る事ができ、また日本語にも対応しています。
※JasperReportsのライセンスは、無償版(Community Edition)のLGPLと有償版(Commercial Edition)の商用ライセンスがあります。
JasperReportsはColdFusion Report やCrystal Reports等と同様、レイアウトを決定するレポート定義ファイルを作り、そこにデータベースやデータファイルのデータを流し込む事で、帳票を作成します。
JasperReportsのレポート定義は、jrxml(JasperReports XML)と言うXML形式のファイルで、テキストエディタで作成する事が可能です。
ですが、多くの場合、iReportや Jaspersoft Studio等のGUIツールを使って作成します。
流し込むデータの事をデータソースと言い、OracleやMySQL、SQL Server等のDBMS、XMLファイル、MS Excel、JSON等に対応しています。
また、作成する帳票の出力形式もPDF, HTML, MS Word(docx), RTF等多くの種類に対応しています。
今回は、レポート定義のGUIツールとしてiReportを、データソースにはXMLファイルを、出力形式はPDFを使用します。
※Jaspersoft Studioは、iReportの後継ソフトウェアになります。今回の記事ではiReportを使用していますが、今後新たに使い始めるのであれば、Jaspersoft Studioを使う方が良いでしょう。
作成したレポート定義ファイル(jrxml)とデータソースからPDFファイルを生成するまでの流れは、以下の図のようになります。
@コンパイル・・・jrxmlファイルを読み込んでコンパイルし、jasperファイルを作成します。
Aデータを合成・・・コンパイルされたレポート定義にデータソースのデータを流し込み、帳票に展開します。
BPDFに変換・・・Aで生成した帳票をPDF形式に変換します。
実際には帳票生成の都度レポート定義ファイルをコンパイルする必要はなく、またiReportでもコンパイルしてjasperファイルを出力できますので、帳票作成処理ではjasperファイルとデータソースをインプットとして、AとBの処理だけを行う事になります。
■ColdFusionからJasperReportsを利用する方法
JasperReportsは、正確にはJasperReports Libraryと言う名称で、その名の通りJavaのライブラリです。自身で開発したJavaアプリケーションからこのライブラリのクラスをコールして帳票(PDF)を生成する事になります。
では、ColdFusionからJasperReportsライブラリをどうやって利用するか。
方法は色々とあるかと思いますが、今回はColdFusionとは別のJavaVMで帳票を生成するDaemon(常駐プログラム)を実行し、ColdFusionのアプリケーションからJava Remote Method Invocation (Java RMI)を使って帳票作成の処理を呼び出すようにします。Java RMIで帳票生成Daemonと通信する部分はJavaで作成し、ColdFusionのJava CFXタグとして登録します。
- ColdFusionのアプリケーションからCFXタグでJasperファイル名、XMLファイル名、出力するPDFファイル名を渡す。
- CFXタグに登録されたJavaプログラムで、Java RMIを経由して帳票生成Daemonに処理を依頼する。
- 帳票生成Daemonは、受け取ったJasperファイル名、XMLファイル名をインプットとして帳票に展開し、指定されたPDFファイル名でPDFファイルを作成する。
こうする事で、ColdFusionが使用するライブラリ(各種Jarファイル)とJasperReportsが使用するライブラリの競合(バージョン違いの問題)を避ける事が出来ますし、WebアプリケーションのJasperReportsへの依存度を下げる事ができます。また、Java RMIさえ使えればColdFusion以外のアプリケーションからもこの帳票作成処理を利用できます。
なお、今回使用する各種技術や使い方等についての詳しい情報は、該当技術の書籍やインターネットで確認してください。
- JasperReportsライブラリのクラスやメソッドとその使い方
- iReportの使い方、XMLファイルをデータソースにする方法やレポート定義のコツ
- XML
- Java言語とJava開発環境
- apache antとbuild.xmlの書き方
- Java RMI
- Java CFXタグの作成
・・・等々
■iReport 5.6.0のインストールと設定
iReportはJavaで書かれていますので、実行にはJavaランタイムが必要です。事前にJava SDK 1.6をインストールしておいてください。 環境変数PATHへのbinフォルダのパス追加と、JAVA_HOMEの登録も忘れないように実施してください。
※JDK1.6.0_34をC:\Javaにインストールした場合の環境変数の例
- PATH に「C:\Java\ jdk1.6.0_34\bin;」を追加。
- JAVA_HOME を新たに追加し、値に「C:\Java\jdk1.6.0_34」を設定。
また、今回紹介するJavaサンプルプログラムでは、コンパイル&Jarファイル作成にantを使用していますので、必要であれば
apache antもダウンロードして、インストールしておいてください。
(1) iReportのインストールと起動確認
iReport-5.6.0-windows-installer.exeを実行して、任意のフォルダにインストールしてください。
インストールが完了したら、iReportが起動します。
もし、ここでJavaのバージョンに関するエラーが表示されるようであれば、iReportをインストールしたフォルダの「etc\ ireport.conf」をテキストエディタで開いて、「#jdkhome="/path/to/jdk"」の行の「#」を消して、”/path/to/jdk”の部分をJAVA_HOMEと同じパス (例: “C:/java/jdk1.6.0_34”) に変更してから再度起動してください。
(2) PDF出力で日本語Fontを使うための設定
iReportは文字フォントにWindowsのフォントも選択できるため、レポート定義作成時に「MSゴシック」「MS明朝」を使用する事ができますが、PDFファイルを出力すると文字化けします。そこで、今回はIPAが公開しているIPAフォントを使用して日本語が正しくPDFに出力されるようにします。
まず、ダウンロードしたIPAフォントパック(IPAfont00303.zip)を解凍して、4つの.ttfファイルをiReportのインストール先フォルダのireport\fontsにコピーします。続いて、ireport\fonts\irfonts.xmlをテキストエディタで開いて下記の内容に置き換えてください。
[ireport\fonts\irfonts.xml]
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="IPA Pゴシック">
<normal><![CDATA[ipagp.ttf]]></normal>
<pdfEncoding><![CDATA[Identity-H]]></pdfEncoding>
<pdfEmbedded><![CDATA[false]]></pdfEmbedded>
</fontFamily>
<fontFamily name="IPA P明朝">
<normal><![CDATA[ipamp.ttf]]></normal>
<pdfEncoding><![CDATA[Identity-H]]></pdfEncoding>
<pdfEmbedded><![CDATA[false]]></pdfEmbedded>
</fontFamily>
<fontFamily name="IPAゴシック">
<normal><![CDATA[ipag.ttf]]></normal>
<pdfEncoding><![CDATA[Identity-H]]></pdfEncoding>
<pdfEmbedded><![CDATA[false]]></pdfEmbedded>
</fontFamily>
<fontFamily name="IPA明朝">
<normal><![CDATA[ipam.ttf]]></normal>
<pdfEncoding><![CDATA[Identity-H]]></pdfEncoding>
<pdfEmbedded><![CDATA[false]]></pdfEmbedded>
</fontFamily>
</fontFamilies>
ireport\fonts\irfonts.xmlの編集が完了したらiReportを起動し、メニューバーからツール(T)→オプション(O)を選択してオプション画面のiReport→Classpathタブを開いてください。
画面右にある[Add JAR]ボタンをクリックして、iReportインストール先フォルダの「ireport\modules\ext」にある「iTextAsian.jar」を選択します。
ClasspathのリストにiTextAsian.jarがフルパスで追加されているのを確認したら、その行のReloadable欄にチェックを付けて[了解]ボタンを押してください。
再び、メニューバーからツール(T)→オプション(O)を選択してオプション画面のiReport→Fontsタブを開いてください。
Fontsのリストに「IPA Pゴシック」「IPA P明朝」「IPAゴシック」「IPA明朝」が表示されている事を確認して、画面下段のPDF fonts pathリスト内にあるiTextAsian.jarの行にチェックをつけて、[了解]ボタンを押してください。
これで、iReportでIPAフォントを使用できるようになります。
後編で作成する帳票作成DaemonでPDF変換する際にもこのIPAフォントを使用します。JasperReportsでIPAフォントを使用するためにはJarファイル化する必要があります。iReportで簡単にJarファイルを出力できますので、以下の手順で実施しておいてください。
- メニューバーからツール(T)→オプション(O)を選択してオプション画面のiReport→Fontsタブを開いてください。
- Fontsのリストに表示されている「IPA Pゴシック」「IPA P明朝」「IPAゴシック」「IPA明朝」をすべて選択した状態で、画面右にある[Export as extension]ボタンを押してください。
- 出力先を指定するダイアログが表示されますので、任意のフォルダにファイル名「ipa_fonts.jar」で保存してください。
■おわりに
前編では、JasperReportsの紹介とColdFusionから利用するための技術要素を中心に説明してきました。
後編では、実際にJava CFXタグとPDFを作成するJavaのプログラムを使用して、ColdFusionからCFXタグでPDFの帳票を出力する例を紹介します。