ときどき、PDFのテキスト的な差分を取りたくなることがあります。Acrobat の機能に比較があるので、これを使うことも可能ですが、遅いし、不要な差分が出たりして面倒くさいです。

我慢して使ってたんですが、探してみたら、pdftotext使ってFileMerge(コマンドラインからはopendiff)するのがサイコーだというので、試してみたら確かにサイコーだった。

opendiffは名前のごとく昔からあるものですが、差分取る前にフィルタを適用する機能があるので、これを使います。 MacWorldの記事ここを参考にしました。

やることは、大きく2つ。pdftotext をインストールして日本語を扱えるように設定することと、シェルスクリプトを一つ書いてFileMergeで設定することです。

まず、pdftotextですが、MacPorts でpopplerとxpdfを入れるという手もあるのですが(上記は、その手順を書いてあった)、gtkとか使っていて、パッケージの依存がとても深いので、オススメしません。同記事に、バイナリのありかがかいてあったので、それを用いました。このディレクトリの xdf-tools-3.dmg をもってきて、中にあるパッケージをインストールします。

さらに、日本語エンコーディングファイルが必要なので、ここからxpdf-japanese.tar.gzをダウンロードしてきます。以下の手順。ルートかルート相当で操作:

mkdir -p /usr/local/share/xpdf
cd /usr/local/share/xpdf
tar zxf ~/Downloads/xpdf-japanese.tar.gz     # パスは適当に変更
mv xpdf-japanese japanese

最後に、xpdfrc をに設定を追加。上書きしないように注意。

cat japanese/add-to-xpdfrc >> /usr/local/etc/xpdfrc

ここまでで、pdftotext で日本語が通るようになるので、以下のようなシェルスクリプトを用意します。

#!/bin/sh
pdftotext -layout -nopgbrk -enc UTF-8 "$1" - 

適当に名前をつけて、適当な場所において、chmod +x しておきます。

最後に、FileMergeを立ち上げて、Preferenceから、Filterを選びます。Filterの設定で、+を押し、

extension へ pdf 、filter へ"pdftotextへのパス $(FILE)" と設定して閉じます。

これで、pdf で diff できます。

ただし、エンコーディングの関係で、"File not ascii" と警告されてしまい "Proceed" 押さないといけないという問題点があります。この記事にあったように、エンコーディング強制してみるとかしてみたんだけど、旨くいきません。だれか上手い方法おしえてください.


blog comments powered by Disqus