JasperReports Libraryでpdfファイルを生成する例。
|
|
まず、帳票イメージ(テンプレート)として、拡張子jrxmlのファイルを作成する必要がある。
jrxmlファイルの作成にはJaspersoft Stuioを使用する。
jrxmlファイルをプログラムから読み込む都合上、src/main/resourcesの下に作るのが無難。
ここでは例としてsrc/main/resourcesの下のcom.example.jasperreportsパッケージの下にexample.jrxmlを作る。
これで、src/main/resources/com/example/jasperreports/example.jrxmlが作られ、エディターが開く。
(ちなみに、このファイルの中身はXML)
jrxmlでは、固定文字列はStatic Textで定義する。
プログラムから値を指定して表示するにはText Fieldを使う。
渡された値をそのまま出力するだけでなく、値を編集して出力する(式を定義する)機能もある。
値の受け渡し方法はパラメーターを使う方法とJavaBeansを使う方法がある。
JasperReports
Libraryでは、Detailの1行が1個のJavaBeansに対応し、JavaBeansのListを渡すことで複数行の出力になる。
パラメーターは(行に依存せず、)全体で共通のデータを渡すのに使用する。
なお、日本語の文字列は、フォントが無いと、実際に変換した時に表示されない。
Static Textを定義するには以下の様にする。
パラメーターを定義するには以下の様にする。
jrxmlファイルを読み込んでpdfファイルを出力する例。
JasperReports Libraryを使ってPDFを出力する処理の大まかな手順は以下の通り。
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やバイト配列に出力することも出来る。