Tool zum Vergleichen einer großen Anzahl von PDF-Dateien? [geschlossen]


84

Ich muss eine große Anzahl von PDF-Dateien für den optischen Inhalt vergleichen. Da die PDF-Dateien auf verschiedenen Plattformen und mit verschiedenen Versionen der Software erstellt wurden, gibt es strukturelle Unterschiede. Beispielsweise:

  • Das Aufteilen von Text kann unterschiedlich sein
  • Die Schreibreihenfolge kann unterschiedlich sein
  • Die Position kann einige Pixel unterschiedlich sein

Es sollte den Inhalt wie ein menschliches Volk vergleichen und nicht die interne Struktur. Ich möchte einen Test auf Regressionen zwischen verschiedenen Versionen des von uns verwendeten PDF-Generators durchführen.


3
Eine teilweise Antwort wäre, pdftotext zu verwenden und den enthaltenen Text zu vergleichen.
Sklivvz

Dies ignoriert jedoch alle nicht textbezogenen Informationen wie Linien, Kästchen, Bilder, Diagramme usw. Ich denke auch, dass die optischen Positionen des Textes nicht angezeigt werden, sondern die strukturelle Position.
Horcrux7

Ich stimme zu, es ist kein ausreichendes Kriterium. Auf der anderen Seite ist es ein notwendiges Kriterium, daher ist es als Unit-Test ausreichend.
Sklivvz

Ich war noch nie in Ihrer Situation, aber ich habe ExamDiff Pro ausprobiert , um PDFs zu vergleichen, und es hat bei mir funktioniert.
Cubex

Sie können später jederzeit einen besseren Komponententest hinzufügen!
Sklivvz

Antworten:


39

Weil es kein solches Tool gibt, das wir geschrieben haben. Sie können den i-net PDF-Inhaltsvergleich herunterladen und verwenden. Ich hoffe das hilft anderen bei dem gleichen Problem. Wenn Sie Probleme damit haben oder Feedback für uns haben, können Sie sich an unseren Support wenden.

Geben Sie hier die Bildbeschreibung ein


Der Vorteil dieses Tools ist, dass es weder ein reiner Textvergleich noch ein Bildvergleich ist. Es vergleicht nach Struktur und prüft, ob die enthaltenen Elemente "gleich" sind. Ihre verglichenen PDF-Dateien müssen also nicht zu 100% übereinstimmen, sondern weisen eine definierbare Ähnlichkeit auf. Und es ist kostenlos.
Gamma

Ich würde das auch empfehlen! Es stürzte auf einem Dokument ab, also schickte ich es ihnen. Sie haben es repariert! : DI fühle mich großartig. Es kann Bilder mit Unterschieden erzeugen oder Ihnen einen Textbericht in der Konsole geben.
Janus Troelsen

4
@gamma Wo ist diese Anwendung kostenlos? Es kostet mindestens 200 USD pro Jahr (!). Es ist nur einmal für 30 Tage kostenlos. Das ist viel zu teuer für das, was ich damit machen würde.
Ygoe

@LonelyPixel Ja, du hast recht. Version 1.0 war kostenlos (Stand 14.10.2010). Wir haben einiges daran geändert und es ist jetzt ein kostenpflichtiges Tool (2012-10). Sie können es jedoch 30 Tage lang ohne Einschränkungen ausprobieren. Es hat wirklich viele neue Funktionen, Stabilität und Zuverlässigkeit gewonnen. Ich hoffe du siehst es dir noch an;)
Gamma

Ich muss auch PDF-Dateien vergleichen - ich habe mir ein Glas mit Apache-PDF-Box ausgedacht. Überprüfen Sie diese testautomationguru.com/… zum Beispiel und laden Sie sie herunter.
Vins

21

Es gibt tatsächlich ein diffpdf-Tool.

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

Seine Schwäche ist, dass es nicht gut reagiert, wenn durch Hinzufügen neuer Text teilweise auf eine neue Seite verschoben wird. Wenn beispielsweise die alte Seite 4 mit dem Ende von Seite 5 und dem Anfang von Seite 6 verglichen werden soll, müssen Sie die Parameter verschieben, um die beiden Slices getrennt zu vergleichen.


1
Die ursprüngliche Open Source-Version ist weiterhin verfügbar unter qtrac.eu/diffpdf-foss.html
Tobias Kienzler

13

Ich habe ein selbstgebackenes Skript verwendet, das

  • konvertiert alle Seiten in zwei PDFs in Bitmaps
  • färbt Seiten von PDF 1 auf Rot-Weiß
  • wechselt auf Seiten von PDF 2 weiß zu transparent
  • Überlagert jede Seite aus PDF 2 mit der entsprechenden Seite aus PDF 1
  • Läuft Konvertierung / Färbung und paralleles Überlagern mehrerer Kerne

Verwendete Software:

  • GhostScript für die Konvertierung von PDF in Bitmap
  • ImageMagick für Färbung, Transparenz und Überlagerung
  • inotify zum Synchronisieren paralleler Prozesse
  • Jeder PNG-fähige Bildbetrachter zur Überprüfung des Ergebnisses

Vorteile:

  • einfache Implementierung
  • Alle verwendeten Tools sind Open Source
  • ideal, um kleine Unterschiede im Layout zu finden

Nachteile:

  • Die Konvertierung ist langsam
  • Hauptunterschiede zwischen PDFs (z. B. Paginierung) führen zu einem Durcheinander
  • Bitmaps sind nicht zoombar
  • funktioniert nur gut für Schwarzweißtext und Diagramme
  • Keine benutzerfreundliche Benutzeroberfläche

Ich habe nach einem Tool gesucht, das auf PDF / PostScript-Ebene dasselbe tut.

So ruft unser Skript die Dienstprogramme auf (beachten Sie, dass ImageMagick GhostScript hinter den Kulissen verwendet, um die PDF-> PNG-Konvertierung durchzuführen):

$ 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

1
Warum nicht das vollständige Skript teilen?
Janus Troelsen

1
Dies ist, was ich für das Compositing verwendet habe:for i in $(seq -w 0 05); do /cygdrive/c/Progra~1/ImageMagick-6.6.9-Q8/composite.exe 1-$i.png 2-$i.png result-$i.png; done
Janus Troelsen

Hier ist ein Skript, das keine temporären Dateien auf die Festplatte schreibt und Popplers pdftoppm verwendet, das schneller als Ghostscript ist: gist.github.com/brechtm/891de9f72516c1b2cbc1 . Es gibt ein JPG für jede Seite der PDFs in einem pdfdiffVerzeichnis aus und druckt zusätzlich die Nummern der Seiten, die sich zwischen den beiden PDFs unterscheiden.
Brecht Machiels


9

Wir haben auch pdftotext (siehe Sklivvz 'Antwort) verwendet, um ASCII-Versionen von PDFs zu generieren und wdiff , um sie zu vergleichen.

Verwenden Sie den -layoutSchalter von pdftotext, um die Lesbarkeit zu verbessern und sich ein Bild von Änderungen im Layout zu machen.

Verwenden Sie dieses Wrapper-Skript, um eine schöne farbige Ausgabe von wdiff zu erhalten:

#!/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

4

Ich denke, Ihr bester Ansatz wäre es, das PDF in Bilder mit einer angemessenen Auflösung zu konvertieren und dann einen Bildvergleich durchzuführen.

Um Bilder aus PDF zu generieren, können Sie die Adobe PDF Library oder die unter Beste Methode vorgeschlagene Lösung zum Konvertieren von PDF-Dateien in TIFF-Dateien verwenden .

Um die generierten TIFF-Dateien zu vergleichen, fand ich GNU tiffcmp (für Windows Teil von GnuWin32 tiff ) und tiffinfo haben gute Arbeit geleistet. Verwenden Sie tiffcmp -l und zählen Sie die Anzahl der Ausgabezeilen, um Unterschiede festzustellen. Wenn Sie sich über eine geringfügige Änderung des Inhalts freuen (z. B. Anti-Aliasing-Unterschiede), verwenden Sie tiffinfo, um die Gesamtzahl der Pixel zu zählen, und Sie können dann einen prozentualen Differenzwert generieren.

Übrigens ist es für jeden, der einen einfachen PDF-Vergleich durchführt, bei dem sich die Struktur nicht geändert hat, möglich, Befehlszeilendiff zu verwenden und bestimmte Muster zu ignorieren, z. B. mit GNU diff 2.7:

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

Dies hat immer noch das Problem, dass Änderungen an generierten Schriftnamen nicht immer erfasst werden.


Ich denke, der Vergleich von 2 Bildern ist komplexer als der Vergleich der PDF-Dateien selbst.
Horcrux7

Das Vergleichen von Bildern kann mit GnuWin32 tiffcmp erfolgen. Ich werde meine Antwort aktualisieren, um dies näher zu erläutern.
Danio

1

Unser Produkt PDF Comparator - http://www.premediasystems.com/pdfc.html "- erledigt dies recht elegant und effizient. Es ist auch nicht kostenlos und eine reine Mac OS X-Anwendung.


Dieses Tool vergleicht Pixel für Pixel. Das ist sehr einfach. Die Frage war ein Vergleich wie ein menschliches Volk.
Horcrux7

1
@ Horcrux7: Aber wie kann man mit dem Vergleich von "Pixel für Pixel" verschiedene Seiten vergleichen, die ähnlich aussehen?!?
Kurt Pfeifle

@KurtPfeifle - Mir ist klar, dass dies ein alter Kommentar ist ... aber Menschen vergleichen Bilder nicht pixelweise; Die Art und Weise, wie Menschen Unterschiede in Bildern vergleichen, ist ziemlich komplex, hängt jedoch stark von der Mustererkennung und Heuristik ab.
CBRF23

@ CBRF23: Stimmt, und das ist mir bewusst - aber all diese Heuristiken wurzeln letztendlich immer noch in "Pixel für Pixel" -Vergleichen. Für einige andere Heuristiken höherer Ebenen, die mit durchgeführt wurden ImageMagick, siehe einige meiner anderen Antworten: eins - zwei - drei .
Kurt Pfeifle

@ CBRF23: ... und das Originalplakat (at) Hocrux7 erwähnte in seiner Frage sogar "Pixel" und wollte ausdrücklich nicht, dass die "interne Struktur" der Dateien verglichen wird (obwohl sein Kommentar hier wiederum dem widerspricht).
Kurt Pfeifle

1

Je nach Ihren Anforderungen ist eine Konvertierungslösung in Text am einfachsten und direktesten. Ich fand die Bitmap-Idee ziemlich cool.



0

Sie können PDF- Dateien mit Tarkware Pdf Comparer stapelweise vergleichen. Es ist jedoch nicht kostenlos und erfordert Adobe Acrobat.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.