JavaでPDF出力するには? Jasper Reports ~帳票出力編~
目次
前回のブログで、帳票のテンプレートをJasper Reportsを利用して作成しました。
今回はJavaからそのテンプレートを使用してPDFを出力したいと思います。
今回のブログで最終回となります。
Javaのプロジェクトを作成する
まずはじめにJavaのプロジェクトを作成しました。ごく普通のプロジェクトです。
(以下の画像はeclipseではなく、stsを使用しています。普通のJavaプロジェクトを作る分には、特に変わりはありません。)
プログラムの構成は以下のようにしました。

早速中身を見ていきましょう。
繰り返し処理用のEntity作成
繰り返し処理で使用する部分を1つのEntityとしてクラスを作成しました。
privateな変数とpublicなgetter、setterを作成します。
名前・備考は文字列を表示するのでString型、数量・価格・金額は数字を表示するのでint型にしています。
テンプレートを作成した時の変数の型と同様にします。
public class TestEntity {
/** 名前 */
private String item_name;
/** 数量 */
private int num;
/** 価格 */
private int price;
/** 金額*/
private int amount;
/** 備考 */
private String note;
// 以下getter、setter
}

実際にEntityを使用する際には、Listにして使います。
resourceの作成
resourceフォルダの中に、Jasper Reports作成時に使用したfontsフォルダをコピーしてipaexg.ttfを入れます。
resouce/fontsフォルダの中に、ipaexg.xmlを作成します。
内容は以下のようにします。
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="IPAexg">
<normal>fonts/ipaexg.ttf</normal>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
</fontFamily>
</fontFamilies>
3行目のfontFamily nameには、テンプレート作成時にフォントの設定をした名前を入れます。この名前がテンプレート作成時と異なっていると、実行時にエラーとなりPDFが作成できません。
resourceフォルダの中に、jasperreports_extension.propertiesを作成します。
このファイルは、JasperReportsの拡張プロパティファイルになります。内容は以下のようにします。
net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory net.sf.jasperreports.extension.simple.font.families.ipaex=fonts/ipaex.xml
テンプレートファイルの設置
場所はどこでも構わないのですが、今回はjasperフォルダをプロジェクト直下に作成し、ファイル名をtest.jasperと変更して置きました。
ライブラリー
Jasper Reportsを実行するには、いくつかのライブラリーを参照する必要があります。
(以下の画像で表示したライブラリが全て必要だというわけではありません。)
ライブラリーは、プロパティー - Javaのビルドパス - ライブラリーのJar追加をしてください。

実行クラス
public static void main(String[] args) {
try {
// テンプレートの読み込み
File jasperFile = new File("C:\\springsource\\workspace-sts-3.4.0.RELEASE\\TestJasperReports\\jasper\\test.jasper");
// 帳票レイアウトのロード
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(jasperFile.getAbsoluteFile());
// データ作成(パラメータ)
HashMap<String, Object> params = new HashMap<String, Object>();
// 小計
params.put("sum_amount", 500);
// 会社名
params.put("com_name", "株式会社AAAAAAA");
// 本日日付
params.put("now", getNowDate(null));
// 期限
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, 9);
cal.set(Calendar.DATE, 31);
params.put("to_date", getNowDate(cal));
// データ作成(繰り返しデータ)
List<TestEntity> list = new ArrayList<TestEntity>();
// 1行目
TestEntity ent = new TestEntity();
ent.setItem_name("アイテム1234");
ent.setNum(1);
ent.setPrice(100);
ent.setAmount(1 * 100);
ent.setNote("備考1234");
list.add(ent);
// 2行目
ent = new TestEntity();
ent.setItem_name("アイテム2");
ent.setNum(2);
ent.setPrice(200);
ent.setAmount(2 * 200);
ent.setNote("備考2");
list.add(ent);
// データの設定
JasperPrint print = JasperFillManager.fillReport(jasperReport, params, new JRBeanCollectionDataSource(list));
// PDFファイル作成
File pdf = new File("test.pdf");
// PDF出力
JasperExportManager.exportReportToPdfFile(print, pdf.getAbsolutePath());
} catch (Exception e) {
System.out.print(e.getMessage());
}
}
実行する
さっそく実行してみます。

出力した結果を見ると、前回プレビューで見た時とは違っていました。
テーブルの1行目の真ん中寄せ、2行目以降の数字が右寄せではなく左寄せ(デフォルト表示)になってしまいました。
どうやってもうまくいかなかったので、もしかしたらJaspersoft Studioのバグなのかもしれません。
上記の理由でうまくいかなかったので、Jaspersoft iReport Designerで修正をおこない実行してみました。

いい感じに表示されるようになりました。
まとめ
いかがでしたでしょうか。
全4回にわたり、JavaからPDF作成について書いてきましたが、帳票を作成するのは意外と難しくはありません。
なんとなく敷居が高いんじゃないかと思うだけで、特別なことは何もありません。
JavaでPDFの帳票作成が必要な場合には、Jasper Reportsで十分対応できます。
また何か便利なツールがありましたら紹介していきたいと思います。
《関連記事》
JavaでPDF出力するには?おすすめツールまとめ
JavaでPDF出力するには? ~Jasper Reports設定編~
JavaでPDF出力するには? ~Jasper Reports 帳票作成編~