web-dev-qa-db-ja.com

多数のPDFファイル?

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

  • テキストのチャンクは異なる場合があります
  • 書き込み順序は異なる場合があります
  • 位置はピクセルによって異なる場合があります

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

83
Horcrux7

私たちが書いたようなツールはないので。 i-net PDF content comparer をダウンロードして使用できます。同じ問題で他の人にも役立つことを願っています。問題がある場合やフィードバックがある場合その場合は、サポートにご連絡ください。

enter image description here

39
Horcrux7

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

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

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

20
jabial

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

  • 2つのPDFのすべてのページをビットマップに変換します
  • PDF 1 to red-on-whiteのページを色付けする
  • PDF 2のページで白に透明に変更します
  • PDF 2からの各ページを、PDF 1
  • 変換/カラーリングとオーバーレイを複数のコアで並行して実行します

使用したソフトウェア:

  • 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
13
akaihola

私はこれをここで見ることができないようですので、ここにあります:via スーパーユーザー:2つのPDFファイルの違いを比較する方法?(answer#229891、 @slestak) 、あります

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

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

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

乾杯!

12
sdaau

また、 pdftotext (Sklivvzの答えを参照)を使用してASCII PDFのバージョンを生成し、 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
8
akaihola

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

から画像を生成するには、PDF Adob​​eを使用できますPDFライブラリまたは pdfファイルをtiffファイルに変換する最良の方法

生成されたTIFFファイルを比較するには、GNU tiffcmpGnuWin32 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

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

4
danio

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

1
user602475

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

1
Peter Truskier

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

0
M Jenkins

compare pdf ファイルをTarkware Pdf Comparerでバッチ処理できます。ただし、無料ではなく、Adobe Acrobatが必要です。

0
erks