Semantisk jämförelse av innehållsströmmar
HPDFContentStream kan normalisera avkodat PDF-innehåll till begränsade kanoniska händelser och jämföra dessa händelser utan att behandla ofarliga serialiseringsval som ändringar
Deklarationer
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;
Normalisering
- Tal kvantiseras med anroparens tolerans och emitteras med platsoberoende stavning
- Litterala och hexadecimala strängar jämförs genom avkodat bytevärde, medan arrayer behåller elementtyp och ordning
- Grafik- och textstillstånds-sättare uppdaterar en effektiv snapshot och redundanta sättare skapar inte händelser
qochQupprätthåller en fullständig tillståndsstack men blir inte händelser i sig- Successiva
cm-operatorer multipliceras i PDF-ordning, så att ekvivalenta matrisfaktoriseringar jämförs lika - Varje behållen operator bär den effektiva matrisen, linjen, färgen, externa grafiken och textstillståndet som gäller vid den punkten
- Inline-bildnycklar normaliseras av tokeniseraren och nyttolaster använder SHA-256-identiteter för att undvika kanonisk-strömsexpansion
Diagnostik och gränser
THPDFContentSemanticStatistics rapporterar token-, operation-, tillståndsoperation-, redundant-tillstånd-, normaliserad-händelse-, maximal-stackdjup-, kanonisk-byte-, fel-offset-, giltighets- och gränsinformation. Jämförelse rapporterar även den första avvikande normaliserade händelsen
Felformaterade nästlade ordlisteoperander, ogiltig tillståndsoperator-aritytal, omatchade eller oavslutade grafikstillståndsomfång, efterföljande operander, operationsöverflöde och kanoniskt-byte-överflöde misslyckas stängt och rapporterar aldrig ekvivalens
Skicka avkodat innehållsbyte. Strömfilter-avkodning och resursnamns-avstämning över olika resursordlistor förblir anroparens ansvar