S-JIS[2017-11-25] 変更履歴

JasperReports Libraryサンプル

JasperReports Libraryでpdfファイルを生成する例。


jrxmlファイルの作成

まず、帳票イメージ(テンプレート)として、拡張子jrxmlのファイルを作成する必要がある。
jrxmlファイルの作成にはJaspersoft Stuioを使用する。

jrxmlファイルをプログラムから読み込む都合上、src/main/resourcesの下に作るのが無難。
ここでは例としてsrc/main/resourcesの下のcom.example.jasperreportsパッケージの下にexample.jrxmlを作る。

  1. パッケージエクスプローラー上でファイルを作成したい場所を右クリックしてコンテキストメニューを出し、「New」→「Other」を選択する。
  2. 「Jaspersoft Studio」→「Jasper Report」を選択し、「Next」ボタンを押す。
  3. 帳票のサイズを選択し、「Next」ボタンを押す。
  4. ファイル名(example.jrxml)を入力し、「Next」ボタンを押す。
  5. 「Data Adapter」で「One Empty Record - Empty rows」を選択し、「Finish」ボタンを押す。

これで、src/main/resources/com/example/jasperreports/example.jrxmlが作られ、エディターが開く。
(ちなみに、このファイルの中身はXML)


jrxmlファイルの加工

jrxmlでは、固定文字列はStatic Textで定義する。

プログラムから値を指定して表示するにはText Fieldを使う。
渡された値をそのまま出力するだけでなく、値を編集して出力する(式を定義する)機能もある。
値の受け渡し方法はパラメーターを使う方法とJavaBeansを使う方法がある。
JasperReports Libraryでは、Detailの1行が1個のJavaBeansに対応し、JavaBeansのListを渡すことで複数行の出力になる。
パラメーターは(行に依存せず、)全体で共通のデータを渡すのに使用する。

なお、日本語の文字列は、フォントが無いと、実際に変換した時に表示されない。


Static Text

Static Textを定義するには以下の様にする。

  1. エディターの右側に『Palette』があるので、その中の「Static Text」をドラッグし、表示したい場所でドロップする。
  2. ドロップしたStatic Textをダブルクリックし、表示したい文字列を入力する。

パラメーター

パラメーターを定義するには以下の様にする。

  1. Outlineの「Parameters」を右クリックし、コンテキストメニューの「Create Parameter」を選択する。
    これにより、「Parameter1」のような名前のパラメーターが作られる。
  2. 作られたパラメーターを右クリックして「Show Properties」を選択する。
  3. Propertiesビューが開くので、その中の「Name」にパラメーター名(例:「PARAM1」)を入力する。

プログラム

jrxmlファイルを読み込んでpdfファイルを出力する例。

JasperReports Libraryを使ってPDFを出力する処理の大まかな手順は以下の通り。

  1. jrxmlファイルを読み込んで(コンパイルして)JasperReportを作る。
  2. JasperReportに値を埋め込み、JasperPrintを作る。
  3. JasperPrintをPDFに変換する。

src/main/java/com/example/jasperreports/JsperReportsPdfExample.java:

package com.example.jasperreports;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportsPdfExample {

	public static void main(String... args) throws IOException, JRException {
		JasperReport jasperReport = createReport();

		JasperPrint jasperPrint = createPrint(jasperReport);
		exportPdf(jasperPrint);
	}
	public static JasperReport createReport() throws IOException, JRException {
		try (InputStream is = JasperReportsPdfExample.class.getClassLoader()
		       .getResourceAsStream("com/example/jasperreports/example.jrxml")) {
			return JasperCompileManager.compileReport(is);
		}
	}
	public static JasperPrint createPrint(JasperReport jasperReport) throws JRException {
		Map<String, Object> parameters = createParameters();
		JRDataSource dataSource = createDataSource();
		return JasperFillManager.fillReport(jasperReport, parameters, dataSource);
	}

	private static Map<String, Object> createParameters() {
		Map<String, Object> parameters = new HashMap<>();
		parameters.put("PARAM1", "Hello parameter");
		return parameters;
	}

	public static class ExampleBean {
	}

	private static JRDataSource createDataSource() {
		List<ExampleBean> list = new ArrayList<>();
		ExampleBean bean1 = new ExampleBean();
		list.add(bean1);

		return new JRBeanCollectionDataSource(list);
	}

JasperReports Libraryでは、データソースが1件も無いと、ページが全く作られない。
その為、ここではダミーのデータを1行分作成している。
(jrxmlファイルのプロパティーで「When No Data Type」を「All Sections No Detail」にしておくと、データソースが0件でもページは作られる。デフォルトは「<NULL>」)

	public static void exportPdf(JasperPrint jasperPrint) throws JRException {
		String file = "D:/temp/jasperreports/example.pdf";
		JasperExportManager.exportReportToPdfFile(jasperPrint, file);
	}
}

JasperExportManagerは、ファイルに出力する以外にOutputStreamやバイト配列に出力することも出来る。


JasperReportsへ戻る / 技術メモへ戻る
メールの送信先:ひしだま