WebWork2ではJasperReportsという帳票ライブラリを使ってPDFファイルを出力することが出来ます。豊富なViewがあるのもWebWork2の特徴の一つです。
準備
以下の3つのライブラリを追加します。なおグラフを出力する場合はJFreeChartが必要になったり、Excelで出力する場合はJakartaPOIが必要になったりします。
- itext.jar
- iTextAsian.jar
- jasperreports-x.x.x.jar(今回使用したのはjasperreports-0.6.8.jar)
xwork.xml
<action name="jasperTest" class="ww2.examples.event.JasperTestAction"> <result name="success" type="jasper"> <param name="location">order.jasper</param> <param name="format">PDF</param> <param name="dataSource">orders</param> <param name="contentDisposition">attachment</param> <param name="documentName">orders</param> </result> </action>
JasperTestAction
public class JasperTestAction extends ActionSupport { private List orders = new ArrayList(); public String execute() { Order order1 = new Order(); order1.setName("注文1"); order1.setPrice(2000); Order order2 = new Order(); order2.setName("注文2"); order2.setPrice(10000); orders.add(order1); orders.add(order2); return SUCCESS; } public List getOrders() { return orders; } public void setOrders(List test) { this.orders = test; } public static class Order { private String name; private int price; public int getPrice() { return price; } public void setPrice(int count) { this.price = count; } public String getName() { return name; } public void setName(String name) { this.name = name; } } }
レポートを出力するときには明細部にorders内のOrderの件数分表示されます。
レポートのデザイン
まずJasperReportsのレポートデザインをします。
直にXMLを書いても、ツールを使っても良いですが、ツールならiReport(http://ireport.sourceforge.net/)がおすすめです。
WebWork2のJasperReports連携の場合は、XMLのテンプレートではなく、テンプレートをコンパイルした中間ファイルを使うのですが、iReportならその中間ファイルを簡単に作ることが出来るためです。
iReportの詳しい説明はしませんが、日本語を出力する場合はiTextAsian.jarをlibに入れてフォントを日本語フォントに変えれば問題ないはずです。あと注意点として実行時に使うJasperReportsとiReportで使うJasperReportsのバージョンを同じにしないとエラーになるようです。iReportのJasperReportsのバージョンを変えたい場合はjasperreports.jarを削除して、使いたいバージョンのjasperreports-x.x.x.jarを入れればOKです。
JasperReporsのフィールドはデータソース(List)内のオブジェクトのプロパティで、パラメータはActionへのパラメータの値が格納されるようです。
結果
jasperTest.actionにアクセスすると、PDFが出力されるます。なおContent-Typeもformatに応じて自動でつきます(PDFの場合はapplication/pdf)