PDFの煮るなり焼くなりのメモ

 処理別でPDFの扱い方を備忘としてまとめてみた。対象はQPDFとかPDFTK、MuPDF-tools、Poppler-utils、Ghostscript、libtiff-toolsといったものが入っている環境か。シェル環境があると便利なので*BSD/LinuxWindowsでもCygwinMinGWといったものを入れていると良い。

暗号化解除

% qpdf --decrypt in.pdf out.pdf

 暗号化解除といっても、読み込みパスワードがかかっていない場合は制限していないのと同じでこれだけで何でもできるようになる。

PDFバージョン変更

% qpdf --force-version=1.4 in.pdf out.pdf

 フリーソフトにおいては、PDFバージョンが1.4(Acrobat 5)以前にしか対応していないものがある。強制的にバージョンを1.4にすることで読み込みができるようになることが多い。

結合

% pdftk in1.pdf in2.pdf output out.pdf

Javascript除去

 簡単に挙げられる方法としては、三個。

 もし、iTextに親しんでいるなら、スクリプトを書く方法もある。なお、PDFJavascriptRemoverというiText関係のソフトがあるものの、扱い方がわからず。

テキストの抽出

 もしPDFがLibreOfficeとか各種DTPソフトで作成されたものであるとか、OCRがかかっていて透明化テキストがついているとかであれば、Poppler-utilsで抽出できる。OCRが必要な場合はここでは対象外。

% pdftotext -enc UTF-8 in.pdf

画像の抽出

 一括して抽出する場合はMuPDFのツール利用が簡単である。

% mutool extract input.pdf

もう一つは、Poppler-toolsのpdfimagesで

% pdfimages -png in.pdf out // PNGで抽出する場合
% pdfimages -j in.pdf out // JPEGで抽出する場合
% pdfimages -tiff in.pdf out // TIFFで抽出する場合

で抽出できる。pdfimagesの標準はpbm形式なので、上記のように標準的な形式で抽出するか、ImageMagickで変換すると扱い易くなる。

画像のPDF化

 ImageMagickとpdftkを併用する、マルチページTIFFを作成してPDFに変換するといった各種の方法がある。

 元のデータが200 ppiの反転した白黒のpbmをImageMagickとpdftkで変換する場合はこんな感じ。

% mogrify -units PixelsPerInch -density 200x200 -negative -format pdf in*.pbm
% pdftk in1.pdf in2.pdf output out.pdf

 ImageMagick自体はマルチページの画像PDFを扱うことができるので、

% convert -units PixelsPerInch -density 200x200 -negative -format pdf in*.pbm out.pdf

で変換することもできるが、恐ろしくメモリーを消費するので推奨しない。

 元データがTIFF(昔スキャンしたヤツとか)でマルチページTIFF経由でPDFに変換する場合は、libtiff-toolsを入れて

% tiffcp in1.tif in2.tif tmp.tif
% tiff2pdf tmp.tif -o out.pdf

という具合で良い。なお、このケースだと圧縮をかけていないので、モノクロならtiffcpで-c g4や-c g3とか、カラーならtiff2pdfのところで-jオプションをつける。

フォントの抽出

 PDFではフォントを埋め込んでいることがあり、MuPDFやFontForge、PDF FontDecorder (http://papy.world.coocan.jp/p5.html#s3)には抽出機能がある。

 一括して抽出する場合は画像抽出の時と同じオプションで、画像もフォントも一緒にできる。

% mutool extract input.pdf