Zum Inhalt springen

Was ist der Unterschied zwischen pdfl compare und pdfl pixelcompare?

Zwei Befehle nehmen zwei PDFs und sagen, was sich geändert hat. Das sieht nach Dopplung aus — bis sie sich zum ersten Mal widersprechen. Dann stellt sich heraus, dass sie nie dieselbe Frage beantwortet haben.

pdfl compare fragt: was sagt das Dokument. pdfl pixelcompare fragt: wie sieht das Dokument aus.

Eine Datei kann das eine bestehen und am anderen scheitern, in beide Richtungen.

Es liest Text, Struktur und Metadaten:

Terminal window
pdfl compare freigabe_v1.pdf neu_v2.pdf

Wissenswert ist, wie es die Seiten einander zuordnet: nach Inhalt, nicht nach Nummer. Fügen Sie mitten in einen Vertrag eine Seite ein, meldet ein naiver Vergleich jede folgende Seite als geändert; dieser bemerkt die Einfügung und vergleicht weiter Gleiches mit Gleichem. Das trägt auch bei Dokumenten von über tausend Seiten.

Jedes zugeordnete Paar bekommt einen Ähnlichkeitswert und eine Auswahl der Zeilen, die sich bewegt haben, - für entfernt und + für hinzugefügt:

page 4 → 4: similarity 97.8% | -original title | +revised title

Geänderte Metadaten sind eine Warnung. Geänderter Text ist ein Fehler, wenn er unter den gesetzten Schwellenwert fällt, und eine Warnung, wenn er darüber bleibt.

Terminal window
# Groß-/Kleinschreibung, Abstände und Daten ignorieren — nützlich, wenn das
# Ausgabedatum bei jedem Export neu erzeugt wird und nicht geprüft werden soll
pdfl compare freigabe_v1.pdf neu_v2.pdf --normalize --ignore-dates
# Bis zu 1 % Abweichung zulassen und etwas Lesbares erzeugen
pdfl compare v1.pdf v2.pdf --similarity-threshold 99 \
--output html --output-file diff.html

Es rendert beide Dateien und vergleicht die Seiten als Bilder:

Terminal window
pdfl pixelcompare freigabe.pdf nachdruck.pdf

Ein Befund je geänderter Seite, mit dem Anteil, der abweicht, und der Zahl getrennter Stellen:

page 7: 0.51% of the pixels differ, in 29 area(s)

Zuerst gleicht es eine globale Verschiebung aus, denn eine aus derselben Quelle neu exportierte Datei landet oft ein, zwei Pixel daneben — ohne das zählte jede Buchstabenkante als Unterschied:

page 3: 2.10% of the pixels differ, in 44 area(s) (aligned by 2, -1 px)

Und es kann einen Ort zum Hinsehen schreiben:

Terminal window
pdfl pixelcompare freigabe.pdf nachdruck.pdf --viewer diff/

Der Ordner enthält die Seiten, die Unterschiede und eine index.html — kein Server, nichts zu installieren. Rot ist verschwundene Farbe, Grün neue Farbe, Blau dieselbe Deckung in einem anderen Ton.

Der Text ist identisch und die Datei ist falsch. Ein Logo, zwei Millimeter verschoben. Eine verschwundene Haarlinie. Eine Sonderfarbe, ersetzt durch ihren CMYK-Aufbau. compare meldet in allen drei Fällen eine perfekte Übereinstimmung, denn kein Zeichen hat sich bewegt. pixelcompare fängt alle drei.

Die Datei sieht identisch aus und der Text ist falsch. Der Titel in den Metadaten wurde ersetzt oder ein Autorenfeld umgeschrieben. Auf der Seite bewegt sich kein Pixel, also sieht pixelcompare zwei identische Dokumente. compare meldet die Änderung.

Keines von beiden enthält das andere. Genau darum geht es.

Ein Vertrag kommt aus der Rechtsabteilung zurück. Sie müssen wissen, was der Wortlaut jetzt sagt im Vergleich zu vorher. Der Umbruch wird sich geändert haben, und das ist Ihnen gleich.

Terminal window
pdfl compare vertrag_v3.pdf vertrag_v4.pdf --ignore-dates \
--output html --output-file pruefung.html

Ein Nachdruck ist von der Lieferantin eingetroffen. Nichts darf anders aussehen als der freigegebene Proof. Ob der Text bis aufs Byte gleich ist, geht an der Frage vorbei — was aufs Papier kommt, ist die Frage.

Terminal window
pdfl pixelcompare freigabe.pdf nachdruck.pdf --viewer diff/

Dasselbe Dokument, mit einem anderen Werkzeug exportiert. Eine Lieferantin hat die Software gewechselt. Die Worte müssen unversehrt bleiben, das Erscheinungsbild wird wahrscheinlich ein wenig abweichen. Das braucht beide, und sie prüfen verschiedene Zusagen:

Terminal window
pdfl compare export_alt.pdf export_neu.pdf --normalize
pdfl pixelcompare export_alt.pdf export_neu.pdf --max-diff 0.1 --viewer diff/

Ein regulierter Beipackzettel oder ein Etikett. Der Warnhinweis ist gesetzlich vorgeschrieben, und das Layout hat jemand freigegeben und unterschrieben. Beides bindet, also wird beides geprüft — und der Viewer-Ordner ist das, was Sie der Freigabe beilegen.

Terminal window
pdfl compare freigabe.pdf druckdatei.pdf
pdfl pixelcompare freigabe.pdf druckdatei.pdf --viewer nachweis/

Jeder Befehl endet mit einem Code, ein Skript entscheidet also, ohne etwas zu lesen. pixelcompare nutzt 0, wenn keine Seite über der Toleranz liegt, 2, wenn eine darüber liegt, und 10, wenn eine Datei nicht lesbar war; compare folgt der Konvention aller prüfenden Befehle — 0 bestanden, 1 Warnungen, 2 Fehler, 10 nicht lesbar.

#!/bin/sh
# Zwei Zusagen, ein Tor: die Worte und das Aussehen.
set -e
pdfl compare freigabe.pdf kandidat.pdf --output-file text-diff.json || {
echo "der Wortlaut hat sich geändert — siehe text-diff.json"
exit 1
}
pdfl pixelcompare freigabe.pdf kandidat.pdf --max-diff 0.05 --viewer diff/ || {
echo "es sieht nicht gleich aus — diff/index.html öffnen"
exit 1
}
echo "gleiche Worte, gleiches Aussehen"
Ihre Frage Der Befehl
Hat sich der Wortlaut geändert? pdfl compare
Haben sich die Metadaten geändert? pdfl compare
Wurde eine Seite eingefügt oder entfernt? pdfl compare
Hat sich etwas verschoben, ist verschwunden oder hat die Farbe gewechselt? pdfl pixelcompare
Druckt es noch gleich? pdfl pixelcompare
Ist das die freigegebene Datei? beide

Das CLI-Kapitel dokumentiert jede Option von beiden, und die Rezepte setzen sie in vollständige Abläufe. Hier steht außerdem ein Beitrag über den pixelgenauen Vergleich und darüber, was eine falsche Datei kostet, sobald sie auf der Maschine ist.

DigitalOceanDank an DigitalOcean für das Hosting dieser Website.