2009年10月20日火曜日

JasperReportでパスワード付きPDF生成

JasperReportでパスワード付きPDF生成してみた。
テストしたコードはこれだ。

try {
File jasperFile = new File("/test/test.jasper");

if (!jasperFile.exists()) {
System.out.println("not found file");
return;
}

Map params = new HashMap();
params.put("p1", "aaa");
params.put("p2", "bbb");

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperFile.getPath(), params);

// Exporterの生成
JRPdfExporter exporter = new JRPdfExporter();

// 出力オブジェクトの設定
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT, jasperPrint);

// 出力先の設定
exporter.setParameter(JRPdfExporterParameter.OUTPUT_FILE_NAME, "/test/test.pdf");
// パスワード保護を有効にする
exporter.setParameter(JRPdfExporterParameter.IS_ENCRYPTED, Boolean.TRUE);
// パスワードの設定
exporter.setParameter(JRPdfExporterParameter.USER_PASSWORD, "1234");
exporter.setParameter(JRPdfExporterParameter.OWNER_PASSWORD, "4321");

// 出力の実行
exporter.exportReport();
} catch (JRException e) {
e.printStackTrace();
}


実行してみたら、

java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1OctetString

エラーが発生した。( ´д`)

足りないライブラリを探してみたら、どうやら「www.bouncycastle.org」で提供するライブラリらしい。

現時点の最新バージョン(1.44)を落とした。
http://www.bouncycastle.org/latest_releases.html

クラスパスに追加してテストしてみると、成功!(´∀`)