JasperReportsとiReportで帳票の常識を理解しよう:業務アプリの常識をJavaオープンソースで身につける(2)(4/4 ページ)
Java言語を使って構築されることが多い、オープンソースの業務用ソフトウェア/アプリケーションを紹介しながら、企業で行われる業務処理の常識を身に付けていく連載
データを表示する帳票のデザイン
■ データを取得するSQL文の設定
[Designer]ビューに、パレットにある部品を配置しますが、各部品をどの「バンド」に配置するかは重要です。「バンド」というのは繰り返しのパターンなどが異なる帳票上の区分です。[Report Inspector]にある、[Title][Page Header][Column Header][Detail 1][Column Footer]などがバンドです。
部品をどこに配置するかによって、レコードが複数あった場合や改ページされた場合の表示パターンが変わります。SQLで取得したレコードが2レコード以上あった場合は、繰り返して表示されますが、レコードごとに繰り返しが行われるのは、「Detail」バンドの部分だけです。
[Page Header][Column Header][Page Footer]などは、ページが切り替わったときに1個分表示されます。
今回は、[Title]には、「納品書」という「Static Text」コンポーネント、およびデータベースから取得する、「郵便番号」「住所」「名前」「日付」の「Text Field」コンポーネントを配置します。
[Column Header]には、明細のヘッダ(列名)として「商品名」「単価」「数量」「小計」の「Static Text」コンポーネントを配置します。
[Detail 1]には、明細の各行として、「商品名」「単価」「数量」「小計」の「Text Field」コンポーネントを配置します。
[Summary]には、「合計」という「Static Text」コンポーネントと、「合計」の「Text Field」コンポーネントを配置します。
「Text Field」コンポーネントを設置する具体的な操作方法は、以下のとおりです。
- パレットから「Text Field」コンポーネントをデザイナの子ウィンドウにドラッグ&ドロップ
- 「Text Field」コンポーネントを右クリック→[Edit expression]で[Expression editor]というウィンドウが表示される
- [Expression editor]ウィンドウの左下にある一覧から、[Fields]を選択
- 下部の真ん中と右の一覧が切り替わる
- 真ん中の一覧がカラム一覧。カラムをダブルクリックすることで、上部の[Expression]に選択したカラムが表示される
- 右下の[Apply]をクリックすると、「Text Field」コンポーネントで表示するカラムを決定できる
このようにして、各部品を配置していきます。
[Column Header][Page Footer][Last Page Footer]の3つのバンドは、[Detail 1][Summary]バンドのスペースをなくすために、[Report Inspector]から、右クリック→[Delete Band]で削除してください。
「小計」と「合計」の「Text Field」コンポーネントでは、変数を使っています。変数は、すでに説明したパラメーターと同じように[Report Inspector]の[Variables]の部分に追加できます。この帳票では、「SUBTOTAL」(小計)と「TOTAL」(合計)という変数を使っています。
■ iReportの枠線を引く方法
各項目の枠線は、パレットにある「Frame」「Line」コンポーネントでも作成できますが、項目自体のボーダーでも設定できます。項目を右クリックして表示されるコンテキストメニューで、[Padding And Borders]から枠を設定できます。
JasperReportsでは、XLS形式で出力したとき、各部品が重なっているとうまく表示できません。そのため、この方法はXLS形式で出力する場合に役立ちます。
■ 金額の表記
前述したように、PCにインストールされているフォントファイルを指定することで、そのフォントで表示できます。
[Pdf Font name]に「HeiseiKakuGo-W5」を指定すると、半角の\(円マーク)がバックスラッシュで表示されてしまいますが、フォントを「MS P ゴシック」などに変更することによって、半角の\(円マーク)をバックスラッシュではなく「\」と表示できます。
金額を表示したいときは、[Text Field]の[Expression]を「"\\" + new DecimalFormat("###,###").format($F{ol_price})」とし、[Expression Class]を「java.lang.String」のようにすれば、金額の左に「\」マークを付けて、3けたごとにカンマを表示できます。
■ iReport上でプレビュー
サンプル帳票の作成が完了したら、プレビューしてみましょう。
このサンプルの.jrxmlファイルはこちらからダウンロードできます。
JasperReportsにパラメータを渡して帳票出力するコード
最後に、作成したjrxmlファイルを使って、サンプルコードからPDFを出力してみます。前述のサンプルコードと異なる点は、パラメータとコネクションをJasperReportsに渡している点です。
また、ここではxls形式でも出力しているので、Apache POIのjarファイルもビルドパスに含める必要があります。
import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.HashMap; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.export.JRXlsExporter; import net.sf.jasperreports.engine.export.JRXlsExporterParameter; public class Sample2 { /** * @param args */ public static void main(String[] args) { Connection con = null; try { // jrxmlを指定する File jrxmlFile = new File("C:\\Adempiere\\reports\\sampleReport2.jrxml"); if(jrxmlFile.exists()){ // jrxmlをコンパイルする JasperReport jasperReport = JasperCompileManager.compileReport(jrxmlFile.getAbsolutePath()); // パラメータの設定 HashMap<String, Object> params = new HashMap<String, Object>(); // サンプルデータの主キーの値を設定 params.put("RECORD_ID", 2); // コネクションの設定 Class.forName("org.postgresql.Driver"); con = DriverManager.getConnection( "jdbc:postgresql://localhost:5432/jasperSample", "postgres","xxxxxxxxxx"); // データソースにあるデータを、コンパイルされた帳票に入れる JasperPrint print = JasperFillManager.fillReport(jasperReport, params, con); // 出力用のPDFを指定する File pdf = new File("report2.pdf"); // PDF形式で帳票の出力 JasperExportManager.exportReportToPdfFile(print, pdf.getAbsolutePath()); // XLS形式で帳票の出力 File xls = new File("report2.xls"); OutputStream output = new FileOutputStream(xls.getAbsolutePath()); JRXlsExporter exporterXLS = new JRXlsExporter(); exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, print); exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, output); exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); exporterXLS.exportReport(); }else{ System.out.println("jrxmlファイルが見つかりませんでした。"); } } catch (Exception e) { e.printStackTrace(); } finally { if(con != null){ try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
プログラムを実行してみてください。report2.pdfとreport2.xlsが、Javaのプログラムと同じ階層に作成されるはずです。
帳票もオープンソースを検討してみては
iReportとJasperReportsを使って帳票を作成する手順を説明しましたが、いかがだったでしょうか?
JasperReportsは、GUIで帳票の設計もでき、優秀なソフトウェアなので、Javaで帳票を出力することになったら、一度は利用を検討してみるべきだと思います。Web上にも比較的多くの情報があるので、JasperReports未体験の方は、ぜひ本稿も参照して使ってみてはいかがでしょうか。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- いまさら聞けない、日本の“帳票”入門
帳票は、実はすごく身近にあるもので、「給与明細」「勤務表」「経費精算伝票」なども帳票に含まれます。あなたの身の回りにある日本の「帳票」について成り立ちや歴史などを知っておきましょう - Webアプリケーションにおける帳票の実現 Webアプリケーションにおける帳票の必然性
- Webアプリケーションにおける帳票の実現 帳票の実現方法には何がありますか?
- Webアプリケーションにおける帳票の実現 PDFによる帳票実現の方法
- Webアプリケーションにおける帳票の実現 帳票ソリューションの事例を教えてください
- セキュリティ、開発負荷削減、エンドユーザー支援が鍵
「帳票の生産性は十分ですか」パネルレポート ツールベンダのパネリストたちが、日本の企業情報システムにおける帳票開発業務の現状とそのあるべき未来を語り合った - Java TIPS − フリーのライブラリを使いPDFを生成する
- Java TIPS − PDF文書を生成する(PDFLib)
- Java TIPS − 既存のPDF文書にコンテンツを追記するには
- PDFによるJ2EEリッチクライアント計画
本連載では、J2EEのクライアントにPDFを採用することで、開発者がどのようなメリットを得られるのか、全4回の記事で紹介していく。 - PDF編集ツール4製品のスペックを横並び比較
Competition 文書交換・配布に利用されているPDF文書を直接修正できるPDF編集ツール。どのような編集ができるのか?編集以外の機能も充実している4製品を比較する - XML文書からPDFファイルを生成する
XMLサーバ/Cocoon自由自在!(最終回) XML文書を美しく出力できるように、Cocoonには、XML文書をPDFに変換するモジュールが用意されている - XMLを取り込んだ最新Officeフォーマットとは
「Office 2007」よりファイル形式として使われている「Office Open XML」ファイルフォーマットについて、その成り立ちやOpenOfficeとの比較、標準化の流れ、仕様の概要、Excelを例にJavaでOfficeファイルのデータを操作する方法を紹介する特集企画