itext5でPDFを暗号化する
PDFファイルを暗号化したかったわけではないが、
暗号化したPDFをフィルタリングする機能を作成したかった。
そこで、サンプルの暗号化されたPDFを探したが、256bitAESで暗号化されたファイルが見つからなかった。
しかたないので、適当なPDFを256bitAES暗号化するプログラムを作成した。
itext5を利用している。
暗号化が関連するため、bcprovが必要になる。
下記の2つのjarファイルをeclipseのbuild pathに追加した。
- itext5-itextpdf-5.5.12.jar
- bcprov-jdk15on-158.jar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package test.pdf; import java.io.FileOutputStream; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; import com.itextpdf.text.pdf.PdfWriter; public class Enc { public static void main(String[] args) { System.out.println("start."); PdfReader reader = null; PdfStamper stamper = null; try { // byte[] ownerPassword = args[0].getBytes(); byte[] userPassword = args[1].getBytes(); reader = new PdfReader(args[2]); // stamper = new PdfStamper(reader, new FileOutputStream(args[3])); stamper.setEncryption(userPassword, ownerPassword, PdfWriter.ALLOW_SCREENREADERS, PdfWriter.ENCRYPTION_AES_256); // System.out.println("end."); } catch (Exception e) { System.out.println("error. " + e.toString()); } finally { try { stamper.close(); } catch (Exception e) { System.out.println("stamper close failed. " + e.toString()); } try { reader.close(); } catch (Exception e) { System.out.println("reader close failed. " + e.toString()); } } } } |
下記の通り実行すると、暗号化されていないPDFを暗号化した新しいファイルが保存される。
1 2 | export CLASSPATH=itext5-itextpdf-5.5.12.jar:bcprov-jdk15on-158.jar:.:$CLASSPATH java test.pdf.Enc 99999 "" orginal.pdf encrypted.pdf |
99999は管理者パスワード
“”はユーザパスワードなしを示している
original.pdfを暗号化し、encrypted.pdfとして出力する。
- EclipseLinkでJPA
- eclipseの良く使うショートカットキー
- eclipseデフォルトの文字コード
- Java DateFormat
- Java8で指定回数繰り返し
- Java9でJAXB
- JavaでZip圧縮
- javaでイメージフォーマット変換
- javaでダミー画像作成
- javaでファイルの更新日時を変更する