84

光学コンテンツについては、多数のPDFファイルを比較する必要があります。PDFファイルはさまざまなプラットフォームで作成されており、ソフトウェアのバージョンも異なるため、構造上の違いがあります。例えば:

  • テキストのチャンクは異なる場合があります
  • 書き込み順序は異なる場合があります
  • 位置はいくつかのピクセルで異なる場合があります

内部構造ではなく、人間のようにコンテンツを比較する必要があります。使用したPDFジェネレーターの異なるバージョン間の回帰をテストしたいと思います。

4

10 に答える 10

20

実際には diffpdf ツールがあります。

http://www.qtrac.eu/diffpdf.html

その弱点は、追加によって新しいテキストが部分的に新しいページに移動したときにうまく反応しないことです。たとえば、古いページ 4 をページ 5 の最後とページ 6 の最初と比較する必要がある場合、パラメーターをシフトして 2 つのスライスを別々に比較する必要があります。

于 2011-05-03T11:49:15.717 に答える
13

私は自家製のスクリプトを使用しました

  • 2 つの PDF のすべてのページをビットマップに変換します
  • PDF 1 のカラー ページを白地に赤に
  • PDF 2 のページで白が透明に変わります
  • PDF 1 の対応するページの上に PDF 2 の各ページをオーバーレイします。
  • 複数のコアで並行して変換/カラーリングとオーバーレイを実行します

使用したソフトウェア:

  • PDF からビットマップへの変換用の GhostScript
  • 色付け、透明度、オーバーレイ用の ImageMagick
  • 並列プロセスを同期する inotify
  • 結果を確認するための PNG 対応の画像ビューア

長所:

  • 簡単な実装
  • 使用するツールはすべてオープンソースです
  • レイアウトの小さな違いを見つけるのに最適

短所:

  • 変換が遅い
  • PDF 間の主な違い (ページネーションなど) により混乱が生じる
  • ビットマップはズーム不可
  • 白黒のテキストと図でのみうまく機能します
  • 使いやすい GUI がない

PDF/PostScript レベルで同じことを行うツールを探していました。

スクリプトがユーティリティを呼び出す方法は次のとおりです (ImageMagick は舞台裏で GhostScript を使用して PDF->PNG 変換を行うことに注意してください)。

$ convert -density 150x150 -fill red -opaque black +antialias 1.pdf back%02d.png
$ convert -density 150x150 -transparent white +antialias 2.pdf front%02d.png
$ composite front01.png back01.png result01.png # do this for all pairs of images
于 2010-02-10T08:59:38.717 に答える
13

ここでこれを見ることができないようですので、ここにあります:スーパーユーザー経由:2つのPDFファイルの違いを比較するにはどうすればよいですか?(回答#229891、@ slestakによる)、あります

https://github.com/vslavik/diff-pdf

(Ubuntu Natty のビルド手順はget-diff-pdf.shにあります)

私が見る限り、それは基本的にPDFの各ページのテキスト/グラフィックスをオーバーレイするため、変更があったかどうかを簡単に確認できます...

乾杯!

于 2011-05-08T06:36:38.637 に答える
9

また、pdftotext (Sklivvz の回答を参照) を使用して PDF の ASCII バージョンを生成し、wdiffを使用してそれらを比較しました。

pdftotext の-layoutスイッチを使用して、読みやすさを向上させ、レイアウトの変更を把握します。

wdiff からきれいな色の出力を取得するには、次のラッパー スクリプトを使用します。

#!/bin/sh
RED=$'\e'"[1;31m"
GREEN=$'\e'"[1;32m"
RESET=$'\e'"[0m"
wdiff -w$RED -x$RESET -y$GREEN -z$RESET -n $1 $2
于 2010-02-10T09:08:33.220 に答える
4

あなたの最善のアプローチは、PDFを適切な解像度で画像に変換し、画像を比較することだと思います。

PDF から画像を生成するには、Adobe PDF ライブラリまたはpdf ファイルを tiff ファイルに変換するための最良の方法で提案されているソリューションを使用できます。

生成された TIFF ファイルを比較するために、GNU tiffcmp ( GnuWin32 tiffの Windows 部分用) とtiffinfoがうまく機能していることがわかりました。tiffcmp -l を使用し、出力の行数を数えて違いを見つけます。少量のコンテンツ変更 (例: アンチエイリアシングの違い) を喜んで行う場合は、tiffinfo を使用してピクセルの総数をカウントし、パーセンテージの差分値を生成できます。

ところで、構造が変更されていない単純な PDF 比較を行う場合は、コマンド ライン diff を使用して特定のパターンを無視することができます。たとえば、GNU diff 2.7 では次のようになります。

diff --brief -I xap: -I xapMM: -I /CreationDate -I /BaseFont -I /ID --binary --text

これには、生成されたフォント名の変更を常にキャッチできるとは限らないという問題がまだあります。

于 2008-09-29T15:04:11.670 に答える
1

ニーズに基づいて、テキストへの変換ソリューションが最も簡単で直接的です。ビットマップのアイデアはかなりクールだと思いました。

于 2011-02-04T00:52:26.357 に答える
1

当社の製品である PDF Comparator - http://www.premediasystems.com/pdfc.html " - は、これを非常にエレガントかつ効率的に実行します。これも無料ではなく、Mac OS X 専用のアプリケーションです。

于 2010-08-03T00:09:37.030 に答える
0

Blubeam pdf ソフトウェアがこれを行います

于 2010-03-23T13:55:31.710 に答える
0

Tarkware Pdf Comparer を使用して、pdf ファイルをバッチ比較できます。ただし、無料ではなく、Adobe Acrobat が必要です。

于 2010-03-28T21:13:48.163 に答える