Java/帳票/JasperReports5.0 CSVデータソースからPDF出力

ポイント

  • テンプレートファイルにCSVデータソース用の特別な設定は不要
    • CSV用の設定をするとプレビュー表示が使えます。
      • 裏ワザあり。
    • 普通のデータソースと同じく、フィールド名を作って、帳票でフィールド名を使うようにするだけです。
  • DBのコネクションの代わりに、JRCsvDataSourceを使います。

裏ワザ

  1. テンプレートファイル(例 JasperSample3.jrxml)と同じディレクトリに
  2. 拡張子だけがcsvのファイル(例 JasperSample3.csv)かつ、一行目がフィールド名のファイルを作成した場合
  3. 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" });
 

サンプルダウンロード


コメント

名前: