前回は、PDFのデザインとプログラムからの出力できるところまでやったので、今回は、変数をバインドしてPDFを作成します。
ですので、変数のバインド先をiReportで設定することと、プログラムで変数を引き渡すところが今回の趣旨になります。
パラメータの作成
Report InspectorのParametersから「追加parameter」を選択します。
パラメータのプロパティは以下のようになります。今回はブログタイトルを表示しようと思いますので、パラメータ名を[blog_title]としました。
name | パラメータ名 |
Parameter Class | パラメータの型 |
Use as a prompt | チェックすることで、Preview時にパラメータの表示値を入力するダイアログが表示 |
Default Value Expression | 初期値を設定 |
Description | パラメータの説明文 |
Properties | SQLを利用する場合の入力値を設定 |
パラメータの配置
パレットからText Fieldを配置して、プロパティのText Field Expressionの[…]を押下します。するとダイアログが表示され、バインドするパラメータを編集することができます。
フィールドの作成
フィールドは繰り返し表示するリストの項目を設定します。今回は、「日付」と「タイトル」を列とするリストを作成しました。
Beanを作成
リストのデータを引き渡すためのBeanを作成します。
public class RowBean { /** 日付 */ private String date; /** タイトル */ private String title; /* getter/setterは省略 */ }
クラスパスを設定
[iReport]-[環境設定]でオプションダイアログを起動します。[Classpath]タグから[Add Folder]を押下して、プロジェクトフォルダを追加します。
PDF出力
ソースはこちら。
@Execute(validator = false) public String param() throws JRException, IOException { String path = RequestUtil.getRequest().getSession().getServletContext() .getRealPath("/WEB-INF/templates/parameter_report.jasper"); /* パラメータにバインドするデータ */ Map<String, Object> param = new HashMap<String, Object>(); param.put("blog_title", "DISってHONEY"); /* フィールドにバインドするデータ */ List<RowBean> fields = new ArrayList<RowBean>(); RowBean rowBean1 = new RowBean(); rowBean1.setDate("2012-12-25"); rowBean1.setTitle("JasperReportを利用してSAStrutsでPDF出力するサンプル"); fields.add(rowBean1); RowBean rowBean2 = new RowBean(); rowBean2.setDate("2012-12-20"); rowBean2.setTitle("PDF帳票作成にはこれ!JasperReportsで日本語(IPAexフォント)を使うまで"); fields.add(rowBean2); byte[] bytes = JasperRunManager.runReportToPdf(path, param, new JRBeanCollectionDataSource(fields)); HttpServletResponse response = ResponseUtil.getResponse(); response.setContentType("application/pdf"); response.setContentLength(bytes.length); OutputStream out = response.getOutputStream(); out.write(bytes); out.flush(); out.close(); return null; }
まとめ
これで、作成できるPDF帳票の幅が広がりましたね(・∀・)