注意点
iText2.1.7 の話なので、最新バージョンでは使うライブラリのバージョン等違う可能性があります。
使っているライブラリがiText2.1.7だった案件でPDFにパスワードを追加したい、と新規で話が出てはまった人向け。
現象
コードとしてはこう書けばいいみたいだけど…
PdfReader reader = new PdfReader(元のPDFファイル名);
PdfEncryptor.encrypt(reader,
new FileOutputStream(パスワードを付与するPDFファイル名),
"aaa".getBytes(), // ユーザーパスワード
"bbb".getBytes(), // マスターパスワード
PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING, // パーミッション、コピー可&印刷可能
true); //暗号キーは128bitか40bitか。trueなら128bit
動かしたら
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.asn1.DEREncodable
で落ちる。
調べたところ、bcprov-jdk-xxx.jarとbcpkix-jdk-xxx.jarをライブラリに入れる必要があるらしい。
ライブラリに追加して実行してみる
https://www.bouncycastle.org/latest_releases.html から最新版 bcpxxx-jdk15on-154.jar をダウンロードしてくるも解決しない。
Jarの中身を見てみると、org.bouncycastle.asn1.DEREncodableVector しかない…。
結論
http://repo2.maven.org/maven2/org/bouncycastle/ から過去のリリースバージョンをダウンロードしてこないとダメ。
- bcpkix-jdk15on-1.47.jar
- bcprov-jdk15on-1.46.jar
bcprov-jdk15on-1.47.jar から org.bouncycastle.asn1.DEREncodable が消えているので注意が必要。