Semantischer Vergleich von Inhalts-Streams
HPDFContentStream kann dekodierten PDF-Inhalt in begrenzte kanonische Ereignisse normalisieren und diese vergleichen, ohne harmlose Serialisierungsentscheidungen als Änderungen zu behandeln
Deklarationen
function HPDFNormalizeContentStreamGraphicsState(
const Bytes: TBytes; out Canonical: TBytes;
out Statistics: THPDFContentSemanticStatistics;
NumberTolerance: Double = 1E-9;
MaxOperations: Integer = 1000000;
MaxCanonicalBytes: Int64 = 67108864
): boolean;
function HPDFCompareContentStreamsSemantic(
const Left, Right: TBytes;
out Info: THPDFContentSemanticCompareInfo;
NumberTolerance: Double = 1E-9;
MaxOperations: Integer = 1000000;
MaxCanonicalBytes: Int64 = 67108864
): boolean;
Normalisierung
- Zahlen werden gemäß der vom Aufrufer vorgegebenen Toleranz quantisiert und mit gebietsschemaunabhängiger Schreibweise ausgegeben
- Literal- und Hexadezimalzeichenfolgen werden nach dekodiertem Bytewert verglichen, während Arrays Elementtyp und Reihenfolge bewahren
- Setter für Grafik- und Textzustand aktualisieren einen effektiven Schnappschuss, und redundante Setter erzeugen keine Ereignisse
qundQverwalten einen vollständigen Zustandsstapel, werden aber nicht selbst zu Ereignissen- Aufeinanderfolgende
cm-Operatoren werden in PDF-Reihenfolge multipliziert, sodass gleichwertige Matrixzerlegungen gleich verglichen werden - Jeder beibehaltene Operator enthält die an dieser Stelle wirksame Matrix sowie Linien-, Farb-, externe Grafik- und Textzustände
- Inline-Bild-Schlüssel werden vom Tokenizer normalisiert und Nutzlasten verwenden SHA-256-Identitäten, um eine Ausdehnung des kanonischen Streams zu vermeiden
Diagnosen und Grenzen
THPDFContentSemanticStatistics meldet Token-, Operations-, Zustandsoperations-, redundante Zustands-, normalisierte Ereignis-, maximale Stapeltiefen-, kanonische Byte-, Fehleroffset-, Gültigkeits- und Grenzinformationen. Der Vergleich meldet außerdem das erste abweichende normalisierte Ereignis
Fehlerhafte verschachtelte Dictionary-Operanden, ungültige Stelligkeit von Zustandsoperatoren, nicht passende oder offene Grafikzustandsbereiche, nachfolgende Operanden, Operationsüberlauf und Überlauf kanonischer Bytes schlagen geschlossen fehl und melden nie Gleichwertigkeit
Übergeben Sie dekodierte Inhaltsbytes. Die Dekodierung von Streamfiltern und der Abgleich von Ressourcennamen über verschiedene Ressourcen-Dictionaries hinweg bleibt Aufgabe des Aufrufers