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
パスワードは正しいため出力ファイルそのものは生成されていますが実体の出力はできていません。
私は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.
バージョンが表示されれば正しくビルドできています。