Semantyczne porównywanie strumieni treści
HPDFContentStream może normalizować zdekodowane treści PDF do ograniczonych zdarzeń kanonicznych i porównywać te zdarzenia bez traktowania nieszkodliwych wyborów serializacji jako zmian
Deklaracje
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;
Normalizacja
- Liczby są kwantowane przez tolerancję wywołującego i emitowane z pisownią niezależną od ustawień regionalnych
- Łańcuchy literałów i szesnastkowe są porównywane po zdekodowanej wartości bajtowej, podczas gdy tablice zachowują typ i kolejność elementów
- Ustawiacze stanu grafiki i tekstu aktualizują efektywny stan, a ich nadmiarowe odpowiedniki nie tworzą zdarzeń
qiQutrzymują pełny stos stanu, ale same w sobie nie stają się zdarzeniami- Kolejne operatory
cmsą mnożone w kolejności PDF, więc równoważne faktoryzacje macierzy porównują się tak samo - Każdy zachowany operator niesie efektywny stan macierzy, linii, koloru, zewnętrznej grafiki i tekstu obowiązujący w danym punkcie
- Klucze obrazów wbudowanych są normalizowane przez tokenizer, a dane używają tożsamości SHA-256, aby uniknąć rozbudowy kanonicznego strumienia
Diagnostyka i limity
THPDFContentSemanticStatistics zgłasza informacje o tokenach, operacjach, operacjach stanu, nadmiarowych operacjach stanu, zdarzeniach znormalizowanych, maksymalnej głębokości stosu, bajtach kanonicznych, przesunięciu błędu, poprawności i limitach. Porównanie zgłasza również pierwsze różne zdarzenie znormalizowane
Złośliwe operandy zagnieżdżonych słowników, nieprawidłowa arność operatorów stanu, niedopasowane lub niezamknięte zakresy stanu grafiki, końcowe operandy, przepełnienie operacji i przepełnienie bajtów kanonicznych zawodzą w trybie zamkniętym i nigdy nie zgłaszają równoważności
Przekaż zdekodowane bajty treści. Dekodowanie filtrów strumieni i uzgadnianie nazw zasobów między różnymi słownikami zasobów pozostaje odpowiedzialnością wywołującego