Referencias cruzadas headless
HPDFHeadlessXRef suministra la indexación validada de xref streams y object streams que usa THPDFHeadlessDocument; los diccionarios y los headers de object streams usan el parser de objetos compartido, mientras que los campos big-endian usan el lector de bytes Direct File compartido
HPDFHeadlessDecodeXRefRows(Dictionary, DecodedBytes, MaxObjects, CancellationToken) lee las entradas directas Type, Size, W y la Index opcional después de que el llamador haya decodificado filtros y predictores
THPDFHeadlessXRefRows es un arreglo de registros THPDFHeadlessXRefRow que contienen ObjectNumber y la THPDFDirectXrefEntry compartida como Entry; los tipos de entrada cero, uno y dos identifican objetos free, direct y comprimidos
Los anchos van de cero a ocho bytes, los campos omitidos usan los defaults PDF, los offsets conservan precisión Int64, y los solapamientos de subsecciones, los desajustes de longitud de payload, las generaciones fuera de rango y el overflow unsigned se rechazan antes de indexar objetos
HPDFHeadlessReadObjectStreamIndex(Dictionary, DecodedBytes, MaxObjects, MaxDecodedBytes, CancellationToken) valida Type=ObjStm, N y First directos, y luego parsea el header numérico a través del parser compartido
THPDFHeadlessObjectStreamMembers es un arreglo de registros THPDFHeadlessObjectStreamMember con ObjectNumber, Offset del payload decodificado base cero y Length positivo; los números de objeto duplicados, los pares no enteros, los offsets inválidos y los presupuestos configurados se rechazan
HPDFHeadlessObjectStreamBody(Members, DecodedBytes, MemberIndex, ExpectedObjectNumber) devuelve el slice exacto del miembro después de comprobar el número de miembro del xref autoritativo contra el header de su contenedor; el llamador del documento parsea ese slice a través del parser compartido
EHPDFHeadlessXRefError reporta un mensaje y el flag read-only LimitExceeded, mientras que la cancelación lanza EHPDFOperationCancelled; los llamadores son dueños de los diccionarios y buffers decodificados, y los arreglos devueltos contienen registros por valor
El provider maneja la indexación y validación de bytes; la precedencia de revisiones, el merging de secciones laterales híbridas, la decodificación de filtros, el descifrado, el caching de objetos y la propiedad del documento quedan en el loader del documento
Valores numéricos exactos
El parser compartido retiene el token original del source cuando la conversión a Single redondearía el valor o su magnitud excede 16777216; los lectores de enteros de referencias cruzadas y object streams prefieren ese token para offsets e índices Int64 exactos, mientras que los enteros pequeños exactos conservan el path eficiente en asignaciones
Las pruebas usan el writer compartido y PDFs independientes de objetos comprimidos, cubren offsets de 40 bits, anchos/defaults, predictores, rangos sparse, precedencia híbrida, índices de miembros malformados y ciclos de revisión, y preservan los umbrales originales de asignación y throughput del parser