【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を選択。

f:id:kawamura_mark2:20160119143813p:plain

  • 帳票のテンプレートを選択(Blank A4でOK)、ファイル名をつけて、完了

 f:id:kawamura_mark2:20160119143941p:plain

  • 作成したファイルを開くと、真っ白な状態の帳票ファイルが表示される。

f:id:kawamura_mark2:20160119144119p:plain
 表示項目の配置は、[パレット]を使用。
 配置したい項目のタイプを[パレット]から選択し、ドラッグ&ドロップで配置する。
 主に使用するのタイプは以下の2つのみ

 ・Static Text :タイトルなど、固定文言の表示に使用
 ・Text Field :名前、住所、金額などDBから取得してくる変動する値の表示に使用

 ※デザイン部分の設定方法は割愛

  • 日本語をPDF出力したい場合

①作成したPDFの、対象項目を選択し右クリック > プロパティーの表示

②[拡張] > PDFを選択し、以下の値を設定する
f:id:kawamura_mark2:20160119145230p:plain
 ・Pdf Embedded :フォントを埋め込むかどうか  ⇒FALSE
 ・Pdf Encoding :エンコーディング  ⇒UniJIS-UCS2-H (Japanese)
 ・Pdf font name :フォント名  ⇒HeiseiKakuGo-W5(ゴシック表記)/HeiseiMin-W3(明朝表記)

PDFファイルへパラメータを出力する方法
  • 作成したPDFの、プロパティを表示(レイアウト上のなにもないところをクリックすると表示されます)

f:id:kawamura_mark2:20160119150717p:plain

  • Edit query, filter and sort options ボタンを選択

f:id:kawamura_mark2:20160119150816p:plain

[パラメータ]タブ > [追加]を選択し、任意のパラメータ名、データ型を設定する

  • 表示項目とパラメータを関連づける

 例: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タブを選択し、クラスの参照ボタンを選択
f:id:kawamura_mark2:20160119154040p:plain
 ③作成したクラスを選択(ビルドパスに作成したクラスが追加されている必要があります)
 ④パラメータとして使用したいフィールドを選択し、追加ボタンを選択

  • 表示項目とパラメータを関連づける

 例: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) {
			~
		}
	}