2014年12月11日木曜日

(5)SpringMVC+Thymelef+Bootstrap で実用アプリの開発: Excel ファイルのエクスポート、PDFの表示

Excel や PDF は、エンドユーザーコンピューティングでよく利用されます。そこで今回は、Excel ファイルや PDF をエクスポートする方法を説明します。画面1、画面2にそれぞれの出力例を示します。
画面1:PDF

画面2:Excel


ビューリゾルバの追加
Excel と PDF のためのビューリゾルバーを追加します。WebAppConfig.java を以下のように変更してください。
リスト1:com.itrane.healthcare.init.WebAppConfig: excelViewResolver は、excel ドキュメントビューのリゾルバです。XmlViewResolver クラスは、Spring の XMLビーンファクトリと同じ DTD を持つXMLベースの設定ファイルを受け入れる ViewResolver の実装です。XmlViewReslver#setLocation( ) メソッドは、ビュー定義 xml ファイルが置かれる場所とファイル名を指定します。明示的に指定しない場合、デフォルトとして /WEB-INF ディレクトリの "views.xml" が指定されます。
pdfViewResolver は、pdf ドキュメントビューのリゾルバで、ResourceBundleViewResolver クラスのインスタンスを返します。 ResourceBundleViewResolver#setBaseName( ) メソッドはビュープロパティ定義ファイルのベース名を指定します。

ビュープロパティの定義
pdfViewResolver で指定したビュープロパティ定義ファイル "views.propererties" をクラスパス内に作成します。
リスト2:src/views.properties: 上記の ".(class)"プロパティは pdfビュークラス(リスト8)を指定します。

excelViewResolver で指定した(上記の場合は暗黙指定)xml ベースのビュー定義ファイルを作成します。
リスト3:/WEB-INF/views.xml
フラグメントの変更
frag01.html の "navbar" フラグメントを変更して、メニュー項目 "エクスポート"を追加します。
リスト4:/WEB-INF/views/fragment/frag01.html:
コントローラの作成
エクスポート機能のためのコントローラを作成します。
リスト5:com.itrane.healthcare.controller.ExportController: "frag01.html : navbar" フラグメントを変更して追加した、"バイタル管理"プルダウンの"エクスポート"メニューを選択すると、上記コントローラの exportForm( ) メソッドが実行され、/WEB-INF/views/export/exportForm.html(画面3:エクスポートフォーム、リスト3)が表示されます。
画面3:エクポートフォーム


ビューの作成
ExportController#exportForm メソッドが返すビュー exportForm.html を作成します。
リスト6:/WEB-INF/views/export/exportForm.html: 上記ビューで、リンクの "エクスポート excel ドキュメント" をクリックすると、th:href 属性で指定した "@{downloadExcel}" url がリクエストされ、 ExportController#downloadExcel( ) メソッドを実行します。このメソッドでは、VitalMst と Vod を全件取得して、"vms" と "vods" の名前で ModelAndView オブジェクトに登録して、ビュー "excelView" を表示します。
リンクの "エクスポート pdf ドキュメント" をクリックすると、ExportController#downloadPdf( ) を実行します。このメソッドでも、VitalMst と Vod を全件取得して、"vms" と "vods" の名前で ModelAndView オブジェクトに登録します。ビューは "pdfView" を表示します。

ドキュメントビュー(excel/pdf)の作成
ExportController#downloadExcel( ) メソッドから呼ばれるビュー "excelView" を作成します。 excelViewResolver は、/WEB-INF/views.xml ビュー定義から、以下のビュークラスを解決します。
リスト7:com.itrane.view.ExcelBuilder: 上記コードは Apache POI を使って Excel ドキュメントを作成します。コントローラから渡されたデータ("vods" と "vms")を取得し、POI の API を使って Excel 形式のファイル(画面2)を作成してクライアントにダウンロードします(例:私の環境ではダウンロードフォルダに "downloadExcel.xls" というファイル名でダウンロードされます)。
ExportController#downloadPdf( ) メソッドから呼ばれるビュー "pdfView" を作成します。 pdfViewResolver は、/src/views.properties ビュー定義から、以下のビュークラスを解決します。
リスト8:com.itrane.view.PdfBuiler: pdf の作成には iText を使用しています。Excel ドキュメントの場合と同様に、コントローラから渡されたデータ("vods" と "vms")を取得して、iText の Document, PdfWriter, PdfPTable オブジェクトを使って一覧表を出力します(画面1)。


ソースコード
ソースコードは GitHub からダウンロードしてください:branche5

0 件のコメント: