Java/帳票/JasperReports5.0 CSVデータソースからPDF出力
ポイント
- テンプレートファイルにCSVデータソース用の特別な設定は不要
- CSV用の設定をするとプレビュー表示が使えます。
- 普通のデータソースと同じく、フィールド名を作って、帳票でフィールド名を使うようにするだけです。
- DBのコネクションの代わりに、JRCsvDataSourceを使います。
裏ワザ
- テンプレートファイル(例 JasperSample3.jrxml)と同じディレクトリに
- 拡張子だけがcsvのファイル(例 JasperSample3.csv)かつ、一行目がフィールド名のファイルを作成した場合
- CSV用のデータソースの設定とかしなくてもプレビューできてしまう。
裏ワザでもなんでもなく、周知のテクニックだったらごめんなさい。
前回と同じテンプレート
出力結果のPDF
- 上記の通り、パラメータとデータベースから取得した値が埋め込まれています。
1.CSVファイル作成
"id","firstname","lastname","city","street"
"1","ローラ","スチール","北海道","稚内市なんとかかんとか"
"2","スーザン","キング","青森県","八戸市なんとかかんとか"
"3","アンネ","ミラー","岩手県","盛岡市なんとかかんとか"
- 前回使ったADDRESSテーブルをそのままCSVファイルにしてみました。
- 文字コードはShift_JIS、改行コードはCR+LF、どちらもwindows標準。
- 一行目をカラム名ヘッダとしてあります。
2.テンプレートの作り方
- 基本的に前回と同じで、以下のフィールドが作られていれば大丈夫です。
- firstname
- lastname
- street
- city
3.Javaソースの変更点
import java.util.*;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.*;
// JasperReports5.0用パラメータ、データソース(CSV)を使ってPDF出力
// 参考 http://foolprogrammer.blogspot.jp/2012/04/itext217_28.html
// http://thinkit.co.jp/free/tech/4/4/1.html
public class JasperSample3 {
public static void main(String[] args) {
// テンプレートXMLファイルのパス
String templatePath = "./JasperSample3.jrxml";
// 出力するPDFファイルのパス
String destPath = "./JasperSample3.pdf";
try {
// (1)テンプレートXMLのコンパイル
JasperReport jasperReport = JasperCompileManager
.compileReport(templatePath);
// (2)パラメータの生成
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("ReportTitle", "ちゃぱてぃ商店従業員名簿");
// (3)データソースの生成 ★ 変更 ★
JRCsvDataSource ds = new JRCsvDataSource("./JasperSample3.csv");
ds.setUseFirstRowAsHeader(true);
// (4)データの動的バインド
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
paramMap, ds); // ★変更★
// (5)PDFへ出力
JasperExportManager.exportReportToPdfFile(jasperPrint, destPath);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
- 前回との変更点は、データソースの生成がデータベースのコネクション取得から、JRCsvDataSourceに変わっています。
- 文字コード改行コードがプラットフォーム標準で、一行目がカラム名ヘッダの場合、データソースの取得は以下の最低限の設定となります。
3-1.文字コード改行コードがプラットフォーム標準で、一行目がカラム名ヘッダの場合
JRCsvDataSource ds = new JRCsvDataSource("./JasperSample3.csv");
ds.setUseFirstRowAsHeader(true);
3-2.文字コードがUTF-8の場合
JRCsvDataSource ds = new JRCsvDataSource("./JasperSample3.csv", "UTF-8");
ds.setUseFirstRowAsHeader(true);
3-3.文字コードがUTF-8、改行コードがLFの場合
JRCsvDataSource ds = new JRCsvDataSource("./JasperSample3.csv", "UTF-8");
ds.setUseFirstRowAsHeader(true);
ds.setRecordDelimiter("\r");
3-3.文字コードがUTF-8、改行コードがLF、一行目がカラム名ヘッダではない場合
JRCsvDataSource ds = new JRCsvDataSource("./JasperSample3.csv", "UTF-8");
ds.setRecordDelimiter("\r");
ds.setColumnNames(new String[] { "id", "firstname", "lastname", "city", "street" });
サンプルダウンロード
コメント
最終更新:2013年01月06日 10:25