Références croisées headless
HPDFHeadlessXRef fournit l'indexation xref-stream et object-stream validée utilisée par THPDFHeadlessDocument ; les dictionnaires et headers d'object-stream utilisent le parser d'objets partagé, tandis que les champs big-endian utilisent le lecteur d'octets Direct File partagé
HPDFHeadlessDecodeXRefRows(Dictionary, DecodedBytes, MaxObjects, CancellationToken) lit les entrées directes Type, Size, W et Index optionnelles après que l'appelant a décodé filtres et prédicteurs
THPDFHeadlessXRefRows est un tableau de records THPDFHeadlessXRefRow contenant ObjectNumber et le THPDFDirectXrefEntry partagé comme Entry ; les kinds d'entrée zéro, un et deux identifient les objets libres, directs et compressés
Les largeurs vont de zéro à huit octets, les champs omis utilisent les défauts PDF, les offsets conservent la précision Int64, et les chevauchements de sous-sections, incohérences de longueur de payload, générations hors bornes et overflow non signé sont rejetés avant l'indexation des objets
HPDFHeadlessReadObjectStreamIndex(Dictionary, DecodedBytes, MaxObjects, MaxDecodedBytes, CancellationToken) valide les Type=ObjStm, N et First directs, puis parse le header numérique via le parser partagé
THPDFHeadlessObjectStreamMembers est un tableau de records THPDFHeadlessObjectStreamMember avec ObjectNumber, Offset de payload décodé base zéro et Length positif ; numéros d'objets dupliqués, paires non entières, offsets invalides et budgets configurés sont rejetés
HPDFHeadlessObjectStreamBody(Members, DecodedBytes, MemberIndex, ExpectedObjectNumber) retourne la tranche de membre exacte après vérification du numéro de membre xref autoritaire contre le header de son conteneur ; l'appelant du document parse cette tranche via le parser partagé
EHPDFHeadlessXRefError rapporte un message et un drapeau LimitExceeded en lecture seule, tandis que l'annulation lève EHPDFOperationCancelled ; les appelants détiennent dictionnaires et buffers décodés, et les tableaux retournés contiennent des records de valeurs
Le provider gère l'indexation et la validation d'octets ; la précédence de révisions, la fusion de sections latérales hybrides, le décodage de filtres, le déchiffrement, le cache d'objets et la propriété du document restent au loader de document
Valeurs numériques exactes
Le parser partagé conserve le token source d'origine quand une conversion en Single arrondirait la valeur ou que sa magnitude dépasse 16777216 ; les lecteurs d'entiers xref et object-stream préfèrent ce token pour des offsets et indices Int64 exacts, tandis que les petits entiers exacts conservent le chemin économe en allocations
Les tests utilisent le writer partagé et des PDF à objets compressés indépendants, couvrent les offsets 40 bits, largeurs/défauts, prédicteurs, plages éparses, précédence hybride, indices de membres malformés et cycles de révisions, et préservent les seuils d'allocation et de débit du parser d'origine