お茶漬けぶろぐ

pdftkでPDFのパスワードを外したい

会社の給与や賞与の明細がパスワード付きPDFで投下されるのだけど、開くたびにパスワード入力するのめんどい。というわけで、パスワードを外したい。

pdftkならパスワードも外せるので、やりましょう。

$ pdftk MEISAI.pdf input_pw PASSWORD output OUTPUT.pdf                                                                                                                                                              [Ret:0 23:02:31]
Error: Unexpected Exception in open_reader()
java.lang.NoClassDefFoundError: org/bouncycastle/crypto/BlockCipher     
        at pdftk.com.lowagie.text.pdf.StandardDecryption.update(StandardDecryption.java:94)
        at pdftk.com.lowagie.text.pdf.PdfEncryption.decryptByteArray(PdfEncryption.java:568)
        at pdftk.com.lowagie.text.pdf.PdfString.decrypt(PdfString.java:273)                                                                                                                                                                    
        at pdftk.com.lowagie.text.pdf.PdfReader.readDecryptedDocObj(PdfReader.java:723)
        at pdftk.com.lowagie.text.pdf.PdfReader.readDocObj(PdfReader.java:1109)
        at pdftk.com.lowagie.text.pdf.PdfReader.readPdf(PdfReader.java:508)
        at pdftk.com.lowagie.text.pdf.PdfReader.<init>(PdfReader.java:172)
        at com.gitlab.pdftk_java.InputPdf.add_reader(InputPdf.java:100)
        at com.gitlab.pdftk_java.TK_Session.add_reader(TK_Session.java:94)
        at com.gitlab.pdftk_java.TK_Session.open_input_pdf_readers(TK_Session.java:111)
        at com.gitlab.pdftk_java.TK_Session.<init>(TK_Session.java:1086)
        at com.gitlab.pdftk_java.pdftk.main_noexit(pdftk.java:152)
        at com.gitlab.pdftk_java.pdftk.main(pdftk.java:130) 
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.crypto.BlockCipher
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        ... 13 more
Error: Failed to open PDF file: 
   202006_0127.pdf
Errors encountered.  No output created.
Done.  Input errors, so no output created.

ダメじゃん。org.bouncycastle.crypto.BlockCipherとかいうクラスが見つからないらしい。
パッケージ足らんのかなと思ってpdftk - aur見てたら、Dependenciesにbcprov (optional) - support for signed PDF documentsだそうで。bcprovはUpstream URLがhttps://www.bouncycastle.org/java.htmlらしいので、bouncycastleってこれドンピシャじゃん。

$ sudo pacman -S bcprov
$ pdftk MEISAI.pdf input_pw PASSWORD output OUTPUT.pdf
WARNING: The creator of the input PDF:
   MEISAI.pdf
   has set an owner password (which is not required to handle this PDF).
   You did not supply this password. Please respect any copyright.

問題なし。owner password設定あるのにお前が入れたのちゃうやんけ、著作権大事にせえや、って書いてあるけど著作権保護のつもりのパスワードじゃないからどうでもいいのさ。

< YottamasterのPS500U3を買ってみる

22/7コラボのNW-A105とWH-XB900Nが届いた >