## DiffPDF

- Verwendung
- Der Vergleichsvorgang
- Vergleichsmodus Wort-für-Wort
- Vergleichsmodus Zeichen-für-Zeichen
- Visueller Vergleich
- Einteilung (Zonen-Bildung)
- Seitenbereiche
- Randbereiche
- Speichern
- Optionen
- Andockbare Fenster
- Verwendung über die Kommandozeile

### Verwendung

Drücken Sie zunächst die Schaltfläche Datei #1 und wählen Sie eine PDF-Datei. Drücken Sie dann die Schaltfläche Datei #2 um eine weitere (idealerweise sehr ähnliche) PDF-Datei auszuwählen. Anschließend drücken Sie die Schaltfläche Vergleichen um den Vergleich beider Dateien zu starten. Sobald der Vorgang abgeschlossen ist können Sie die Seiten mit Unterschieden paarweise anzeigen lassen, indem Sie die Ansicht-Auswahlbox oder die Schaltflächen Vorherige und Nächste verwenden. Alternativ können Sie auch zwei Dateien—entweder einzeln oder auf einmal—mit der Maus auf die Seitenanzeigebereiche von DiffPDF ziehen, und anschließend die Schaltfläche Vergleichen drücken.

### Der Vergleichsvorgang

Wenn die Schaltfläche Vergleichen gedrückt wird führt DiffPDF einen sehr schnellen Scan jedes Seitenpaares aus (etwa 100 Seitenpaare die Sekunde auf dem Computer des Entwicklers). Um die Geschwindigkeit des Scanvorgangs zu beschleunigen wird nur eine sehr grobe Prüfung der Seitenpaare durchgeführt—es ist daher möglich, dass es zu Fehlerkennungen kommt (d.h. ein Seitenpaar wird aufgelistet obwohl es keine Unterschiede gibt). Fehlerkennungen treten nur selten auf. (Es kann jedoch nicht vorkommen dass Seiten, die sich unterschieden, nicht erkannt werden.)

### Vergleichsmodus Wort-für-Wort

Der Standardvergleichsmodus ist Wort-für-Wort, bei dem ein intelligenter Textvergleich wortweise für jedes Seitenpaar durchgeführt wird. In diesem Modus wird recht freiheitlich mit Leerraumzeichen (whitespace) umgegangen damit Änderungen am Layout nach Möglichkeit nicht als Unterschied erkannt werden (innerhalb einer Seite). Auch werden alle Binde- und Trennstriche als gleich angesehen. Dieser Modus eigenet sich am besten für alphabetische Sprachen wie etwa Deutsch und Englisch.

### Vergleichsmodus Zeichen-für-Zeichen

Bei diesem Vergleichsmodus wird ein intelligenter Einzelzeichenvergleich für den Text jedes Seitenpaares durchgeführt. Hierbei wird recht freiheitlich mit Leerraumzeichen (whitespace) am Ende jeder Zeile umgegangen damit Änderungen am Laouyt nach Möglichkeit nicht als Unterschied erkannt werden. Auch werden alle Binde- und Trennstriche als gleich angesehen. Dieser Modus eigenet sich am besten für logographische Sprachen wie etwa Chinesisch und Japanisch.

### Visueller Vergleich

Der visuelle Vergleichsmodus eignet sich um Unterschiede bei Schriftarten, Diagrammen oder anderen sichtbaren Elementen zu finden. Dieser Modus ist absolut genau und vergleicht jedes Seitenpaar Pixel für Pixel. Standardmäßig werden Unterschiede auch in diesem Modus durch farbliche Hervorhebug markiert. Alternativ können hier jedoch auch Kompositionsmodi verwendet werden, welche das Auffinden von minimalen Unterschieden erleichtern können.

### Einteilung (Zonen-Bildung)

Die Einteilung ist ein experimenteller Modus um die Genauigkeit der Ergebnisse zu verbessern (d.h. weniger Fehlerkennungen). Der Hauptanwendungsbereich sind Seiten die Tabellen oder alphabetische und logographische Texte enthalten, da es hier dazu kommen kann dass die intern verwendete Poppler PDF Bibliothek die Texte auf der Seite in unterschiedlicher Reihenfolge liefert. Warnung: Einteilung kann bei großen, komplexen Seiten (größer als A4, mehrere Spalten, Tabellen) im Vergleichsmodus Zeichen-für-Zeichen sehr langsam sein. (Bei der Einteilung wird der Schwerpunkt auf die Funktionalität gelegt, nicht auf die Effizienz). Außerdem kann es in einigen Fällen passieren dass die Einteilung zu vermehrten Fehlerkennungen führt—dies kann vorkommen da sich durch die Einteilung die Reihenfolge ändert, in welcher der Text an den Sequenzmatcher übergeben wird, und diese Umsortierung verkehrt sein kann. Dies zu korrigieren kann schwierig sein; Änderungen an den Toleranz-Einstellungen können helfen.

Toleranz/B ist die maximale Distanz zwischen Textbereichen (Wörtern) bei der Texte der gleichen Zone zugeordnet werden. Kleinere Werte führen zu mehr Zonen; größere Werte zu weniger Zonen. Mehr Zonen benötigen mehr Zeit für die Berechnung aber können zu genaueren Ergebnissen führen; weniger Zonen können Fehlerkennungen reduzieren.

Toleranz/Y wird verwendet um die Y-Koordinate auf eine Vielzahl dieses Wertes zu runden. Ist beispielsweise Toleranz/Y auf 5 eingestellt dann wird ein Wort bei (452,137) und ein folgendes Superscript bei (468,140) bei der Verarbeitung behandelt als hätten beide die Y-Koordinate 140.

### Seitenbereiche

Standardmäßig vergleicht DiffPDF alle Seitenpaare der beiden PDFs (die Anzahl wird durch die Zahl der Seiten des kürzeren PDFs bestimmt). Es ist auch möglich nur bestimmte Seiten oder Seitenbereiche zu vergleichen. Gibt es beispielsweise zwei Versionen eines PDFs, eine mit 12 Seiten und eine mit 13 Seiten, da eine Extraseite als Seite 4 eingefügt wurde, dann kann der Vergleich durchgeführt werden durch Angabe der Seitenbereiche 1-12 für das erste und 1-3,5-13 für das zweite PDF. Das bewirkt, dass DiffPDF die Seitepaare (1, 1), (2, 2), (3, 3), (4, 5), (5, 6), und so weiter, bis (12, 13) vergleicht.

### Randbereiche

DiffPDF kann Text innerhalb von Randbereichen (oben, unten, links, rechts) vom Vergleich ausschließen. Ein oder mehrere Randbereiche können definiert werden indem zunächst die Checkbox Randbereiche ausschließen angehakt wird und anschließend Werte für die gewünschten Bereiche eingetragen werden. Randbereiche können auch durch Klick in die Seite definiert werden.

### Speichern

Die Schaltfläche Speichern unter öffnet den Speichern-Dialog. Über diesen Dialog kann eine PDF-Datei mit den Hervorhebungen erstellt werden. Alternativ können auch Bilddateien erstellt werden (etwa PNG oder verschiedene andere Formate). Es kann nur das aktuelle Seitenpaar oder alle Seitenpaare gespeichert werden. Es können zudem nur die Seiten aus dem linken PDF (Datei #1), nur die aus dem rechten (Datei #2) oder beide Seiten nebeneinander gespeichert werden.

### Optionen

Der Optionen Dialog wird geöffnet über die Schaltfläche Optionen. Für die Hervorhebungen kann die Farbe, dessen Füllmuster, Rahmen und Deckkraft eingestellt werden. Die Genauigkeit des visuellen Vergleichs kann eingestellt werden. Kleine Werte bewirken eine genauere Hervorhebung—sind jedoch rechenintensiver. Die Breite der Randmarker, welche die vertikale Position der Unterschiede anzeigen, kann eingestellt werden. Eine Breite von 0 deaktivert die Randmarker.

### Andockbare Fenster

Die Bereiche Steuerung, Aktionen, Randbereich, Einteilung und Log sind Dock-Widgets—diese können mit der Maus an die gewünschte Stelle oder aus dem Hauptfenster heraus gezogen werden. Randbereich, Einteilung und Log können auch geschlossen werden; durch Klick auf die Titelzeile eines beliebigen Widgets mit der rechten Maustaste öffnet sich ein Menü, über welches die geschlossenen Widgets wieder eingeblendet werden können. Mehrere Widgets können auch übereinander gezogen werden, so dass über kleine Reiter zwischen Ihnen hin und hergeschalten werden kann.

### Verwendung über die Kommandozeile

Obwohl DiffPDF ein Programm mit graphischer Benutzerschnittstelle ist kann es auch über eine Konsole gestartet werden. Werden dabei zwei PDF-Dateien übergeben, dann führt DiffPDF nach dem Start sofort einen Word-für-Wort Vergleich der beiden Dateien aus. Wird den Dateinamen ein `-a` oder `--appearance` vorangestellt, dann wird ein visueller Vergleich durchgeführt. `-c` oder `--character` startet einen Zeichen-für-Zeichen Vergleich. Die Angabe `--help` listet alle verfügbaren Kommandozeilenparameter auf. (Dies funktioniert nicht unter Windows, die anderen Parameter allerdings schon.) Hier ist die Ausgabe von `--help`:

    usage: diffpdf [options] [file1.pdf [file2.pdf]]

    A GUI program that compares two PDF files and shows
    their differences.

    The files are optional and are normally set through
    the user interface.

    options:
    --help             show this usage text and terminate (run the
                       program without this option and press F1 for
                       online help)
    --appearance  -a   set the initial comparison mode to Appearance
    --characters  -c   set the initial comparison mode to Characters
    --words       -w   set the initial comparison mode to Words
    --language=xx      set the program to use the given translation
                       language, e.g., en for English, cz for Czech;
                       English will be used if there is no translation
                       available
    --debug=2          write the text fed to the sequence matcher into
                       temporary files (e.g., /tmp/page1.txt etc.)
    --debug=3          as --debug=2 but also includes coordinates in
                        y, x order

Die Text-Umsortierung wird vorgenommen in Methode `TextItems::columnZoneYxOrder()` in Datei `textitem.cpp` : Verbesserungsvorschläge nehme ich gerne entgegen! (Beachten Sie bitte dass bei Verwendung von `--debug3` die Koordinaten in der Reihenfolge y, x angegeben werden.)

Wenn Sie auf der Suche nach einem Kommandozeilentool für den Vergleich von PDF-Dateien sind, etwa für automatisiertes Testen, dann probieren Sie auch comparepdf aus.