【java】JasperReport + JaspersoftStudioでのPDF帳票出力 その2
前回の続き
目次
※今回は(3)、(4)、(5)まで
(1) JaspersoftStudioのインストール
(2) 関連ライブラリの設定
(3) レイアウト(.jrxml)ファイル作成
(4) PDFファイルへパラメータを出力する方法
(5) PDFファイルへJavaBeanを出力する方法
レイアウト(.jrxml)ファイル作成
Eclipseのパッケージエクスプローラ上、任意の場所に、テンプレートファイル(.jrxml)を作成
- [新規] > [その他]メニューから、 [Jaspersoft Studio] > Jasper Reportを選択。
- 帳票のテンプレートを選択(Blank A4でOK)、ファイル名をつけて、完了
- 作成したファイルを開くと、真っ白な状態の帳票ファイルが表示される。
表示項目の配置は、[パレット]を使用。
配置したい項目のタイプを[パレット]から選択し、ドラッグ&ドロップで配置する。
主に使用するのタイプは以下の2つのみ
・Static Text :タイトルなど、固定文言の表示に使用
・Text Field :名前、住所、金額などDBから取得してくる変動する値の表示に使用
※デザイン部分の設定方法は割愛
- 日本語をPDF出力したい場合
①作成したPDFの、対象項目を選択し右クリック > プロパティーの表示
②[拡張] > PDFを選択し、以下の値を設定する
・Pdf Embedded :フォントを埋め込むかどうか ⇒FALSE
・Pdf Encoding :エンコーディング ⇒UniJIS-UCS2-H (Japanese)
・Pdf font name :フォント名 ⇒HeiseiKakuGo-W5(ゴシック表記)/HeiseiMin-W3(明朝表記)
PDFファイルへパラメータを出力する方法
- 作成したPDFの、プロパティを表示(レイアウト上のなにもないところをクリックすると表示されます)
- Edit query, filter and sort options ボタンを選択
[パラメータ]タブ > [追加]を選択し、任意のパラメータ名、データ型を設定する
- 表示項目とパラメータを関連づける
例:Text Field
①Paletteビューから、Text Fieldをドラッグ&ドロップします
②ドロップしたTextFieldをダブルクリックし、Expression Editorダイアログを表示
③初期設定されているテキストを削除し、対象のパラメータを選択後、完了。
- java側の実装例
java側の実装サンプルは下記の様になる。
※テンプレートに設定したパラメータ名と同一の名称を指定すること。
// 帳票レイアウト(.jrxml)ファイル配置パス private static final String JRXML_FILE_PATH = "/WEB-INF/jrxml/sample.jrxml"; public static void main(String[] args) throws Exception { // 帳票レイアウトをコンパイル ServletContext app = ServletContextUtil.getServletContext(); String path = app.getRealPath(JRXML_FILE_PATH); File pdf = new File(path); JasperReport jr = JasperCompileManager.compileReport(pdf.getPath()); // パラメータをセット HashMap<String, Object> parameters = new HashMap<String, Object>(); parameters.put("parameter", "パラメータ設定テスト"); JasperPrint jp = JasperFillManager.fillReport(jr, parameters); byte[] bytes = JasperExportManager.exportReportToPdf(jp); response.setContentType("application/pdf"); response.setContentLength(bytes.length); ServletOutputStream out = response.getOutputStream(); out.write(bytes); out.flush(); out.close(); } catch (Exception e) { ~ } }
PDFファイルへJavaBeanを出力する方法
- パラメータとなるクラスを作成する
/** 氏名 **/ private String name; /** 性別 **/ private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; }
- 作成したクラスを、テンプレートファイルに設定する
①作成したPDF、Edit query, filter and sort options ボタンを選択
②JavaBeanタブを選択し、クラスの参照ボタンを選択
③作成したクラスを選択(ビルドパスに作成したクラスが追加されている必要があります)
④パラメータとして使用したいフィールドを選択し、追加ボタンを選択
- 表示項目とパラメータを関連づける
例:Text Field
①Paletteビューから、Text Fieldをドラッグ&ドロップします
②ドロップしたTextFieldをダブルクリックし、Expression Editorダイアログを表示
③初期設定されているテキストを削除し、対象のフィールドを選択後、完了。
- java側の実装例
java側の実装サンプルは下記の様になる。
※テンプレートに設定したパラメータ名と同一の名称を指定すること。
// 帳票レイアウト(.jrxml)ファイル配置パス private static final String JRXML_FILE_PATH = "/WEB-INF/jrxml/sample.jrxml"; public static void main(String[] args) throws Exception { // 帳票レイアウトをコンパイル ServletContext app = ServletContextUtil.getServletContext(); String path = app.getRealPath(JRXML_FILE_PATH); File pdf = new File(path); JasperReport jr = JasperCompileManager.compileReport(pdf.getPath()); // パラメータをセット HashMap<String, Object> parameters = new HashMap<String, Object>(); parameters.put("parameter", "パラメータ設定テスト"); List<SampleDto > list = new ArrayList<SampleDto >(); // 作成したデータバインド用のクラスに値をセット SampleDto dto = new SampleDto(); dto.setName("テストさん"); dto.setSex("男性"); list.add(dto); JasperPrint jp = JasperFillManager.fillReport(jr, parameters, new JRBeanCollectionDataSource(list)); byte[] bytes = JasperExportManager.exportReportToPdf(jp); response.setContentType("application/pdf"); response.setContentLength(bytes.length); ServletOutputStream out = response.getOutputStream(); out.write(bytes); out.flush(); out.close(); } catch (Exception e) { ~ } }