Comparaison sémantique de flux de contenu
HPDFContentStream peut normaliser le contenu PDF décodé en événements canoniques bornés et comparer ces événements sans considérer les choix de sérialisation inoffensifs comme des modifications
Déclarations
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;
Normalisation
- Les nombres sont quantifiés selon la tolérance de l’appelant et émis avec une orthographe indépendante de la locale
- Les chaînes littérales et hexadécimales sont comparées par valeur d’octets décodée, tandis que les tableaux conservent le type et l’ordre des éléments
- Les opérateurs d’état graphique et texte actualisent un instantané effectif, et les affectations redondantes ne créent pas d’événements
qetQmaintiennent une pile d’état complète mais ne deviennent pas eux-mêmes des événements- Les opérateurs
cmsuccessifs sont multipliés dans l’ordre PDF, de sorte que les factorisations de matrice équivalentes soient égales - Chaque opérateur conservé transporte la matrice effective, l’état de ligne, couleur, graphiques externes et texte qui s’applique à cet instant
- Les clés d’image en ligne sont normalisées par le tokenizer et les charges utiles emploient des identités SHA-256 afin d’éviter l’expansion du flux canonique
Diagnostics et limites
THPDFContentSemanticStatistics rapporte les informations de jetons, opérations, opérations d’état, états redondants, événements normalisés, profondeur maximale de pile, octets canoniques, décalage d’erreur, validité et limites. La comparaison rapporte aussi le premier événement normalisé différent
Les opérandes de dictionnaire imbriqué mal formées, arités invalides d’opérateurs d’état, étendues d’état graphique non appariées ou non fermées, opérandes traînantes, dépassement d’opérations et dépassement d’octets canoniques échouent de façon sûre et ne signalent jamais une équivalence
Passez des octets de contenu décodés. Le décodage des filtres de flux et la réconciliation des noms de ressources entre dictionnaires de ressources différents restent à la charge de l’appelant