レイアウトも含めたPDFの差分を取るには

たまには役に立ちそうなことでも書こう。


Windows で差分を取るツールといえば DF やら WinMerge やらが有名どころだが、それらは主にテキストファイルが比較対象になる。WinMergeプラグインを入れれば Excel や Word や PDF の差分まで取ることができるが、やっぱりこれもテキストの比較になってしまう。
今回、PDFのレイアウトも含めた差分を取る必要が出てきた。さて、どうしたものかとグーグル先生にお伺いを立てたところ、一番最初に見つかったのがこちら。
PDFをPDFのまま差分チェック「DiffPDF」

テキストや図の差分も分かりやすく表示されているので、これで解決だと思うわけですよ。でも最後の一文を読むとですね。

この手のソフトウェアとしてPDFをテキスト化して、それを比較するものはありましたが、PDFのまま比較してくれるという点においてDiffPDFは非常に便利です。なお日本語には対応しておらず、PDFとして表示した時点でも内容が抜け落ちてしまっています。



駄目じゃん!



続いて2つ目。Adobe Acrobat Pro を使えばできるよ、と書いてある。だけど製品版を買うまでもないよなぁ、ということで却下。



3つ目はこちら。
PDF の差分をとる方法
Adobe Reader と Image Magick を使って、新旧のPDFを画像に変換し、合成するというもの。別案件で丁度 Image Magick を使った実装方法の検討を終えたばかりなので PC には Image Magick が入っている。Adobe Reader もある。おっ、これはイケるか?
今後のテストで使うことを考えると、バッチ形式にしたほうが使い勝手も良いだろう。PDFを画像に変換するだけなら Adobe Reader を使わずとも Ghost Script を噛ませば大丈夫だ。実装方法を検討したところ下記の通りとなった。

  1. GhostScript で新旧PDFを画像にする。
    実は Image Magick からでも(GhostScript経由で) PDFから画像を生成することができるが、-dSAFER オプションの所為で日本語フォント周りの警告が出て正しく画像に変換できなかったのと時間の都合で、直接 GhostScript 叩くことにした。
  2. Image Magick で新旧画像ファイルを赤一色/青一色に変換する。
  3. 変換した画像を Image Magick で合成する。

この辺の処理をバッチでごりごり書いた結果、レイアウトも含めたPDFの差分を取ることができた。