qpdfで暗号化保護解除がうまくいかないとき

qpdfとはpdfファイルの変換などを行ってくれる便利ツールです。 その機能の一つに暗号化処理で保護されたpdfファイルのパスワードを解除してくれるものがあります。使い方としては以下のような具合(詳しい説明は省きます)↓

$ qpdf --decrypt $input_file --password=$password $output_file.pdf

しかしながら一部のpdfファイルでは、この方法を実行すると以下のようなログとともに破損した出力ファイルが生成されます。

qpdf: integer out of range converting 4040556602 from a 8-byte unsigned type to a 4-byte signed type

パスワードは正しいため出力ファイルそのものは生成されていますが実体の出力はできていません。

f:id:Stearin:20210208140927p:plain
Adobe Acrobat Reader DCで開こうとしても失敗してしまう

私はWSL2を普段使っていますがaptにおいてインストールされるqpdfのバージョンUbuntu 20.04の場合9.1.1までのようです。 githubのissueを確認したところでは10.0.4で修正されているようなので最新バージョンである10.1.0をビルドして解決しました。 ビルドにはlibjpegが必要になるのでそれもあわせて導入しました。

$ wget https://www.ijg.org/files/jpegsrc.v9d.tar.gz
$ tar xvzf jpegsrc.v9d.tar.gz
$ cd jpeg-9d/
$ ./configure
$ make
$ sudo make install
$ git clone https://github.com/qpdf/qpdf
$ cd qpdf/
$ ./configure
$ make
$ sudo make install
$ echo "export LD_LIBRARY_PATH=/usr/local/lib" >> ~/.bashrc
$ qpdf --version
qpdf version 10.1.0
Run qpdf --copyright to see copyright and license information.

バージョンが表示されれば正しくビルドできています。

参考

daeudaeu.com

github.com

github.com