macでpdfのdiffをとりたい


はじめに

ディスコンになったICのデータシートと後継型番のデータシートがほぼ同じに見えた&目grepにも限界があるので、差分をとりたくなった。
調べてみるとMacではAdobe Acrobatを使うかdiff-pdfを使う方法があるらしい。
個人的にAdobe製品は極力使いたくないのでdiff-pdfを使ってみることにした。

環境

macOS Catalina 10.15.6
XQuartz 2.7.11
diff-pdf 0.4.1_4

インストール

  1. XQuartz
    以下から落として入れるだけ
    https://www.xquartz.org/

  2. diff-pdf
    brewで入れる

    brew install diff-pdf
    

使い方

  • 差分をターミナル上で表示する場合

    diff-pdf -v a.pdf b.pdf
    
  • 差分をファイルに出力する場合

    diff-pdf --output-diff=output.pdf a.pdf b.pdf
    
  • 差分をファイルに出力しないでビューワーを起動する場合

    diff-pdf --view a.pdf b.pdf
    

オプション

  • -h, --help
    ヘルプを表示する

  • -v, --verbose
    差分をターミナル上で表示する

  • -s, --skip-identical only output pages with differences
    --output-diff=と併用で差分のみをファイルに出力する

  • -m, --mark-differences additionally mark differences on left side
    出力の左端にどの行に差分があるか表示する

  • --output-diff= output differences to given PDF file
    出力を指定したファイル名で保存する

  • --channel-tolerance= consider channel values to be equal if within specified tolerance
    差分があると判定するしきい値を0〜255の範囲で指定出来る
    0がデフォルトで完全一致じゃなければ差分判定される

  • --view view the differences in a window

結果

差分を確認したいのはLEDドライバICであるMAX7219CNGMAX7219CNG+のデータシート

ひとまず差分がどれだけあるか確かめてみたが、全ページが差分判定となってしまった

diff-pdf -v MAX7219CNG.pdf MAX7219CNG+.pdf
// 出力
page 0 differs
page 1 differs
page 2 differs
〜中略〜
page 16 differs
page 17 differs
18 of 18 pages differ.

とりあえず100でしきい値を設定してみると2ページのみ差分判定となった

diff-pdf -v --channel-tolerance=100 MAX7219CNG.pdf MAX7219CNG+.pdf
// 出力
page 13 differs
page 17 differs
2 of 18 pages differ.

差分のみファイルに出力して見てみるといい感じに差分が見られる

diff-pdf -v -s --output-diff=output.pdf --channel-tolerance=100 MAX7219CNG.pdf MAX7219CNG+.pdf
open output.pdf

参考

[Mac] PDF 差分チェッカー “diff-pdf”