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やバイト配列に出力することも出来る。