Cross references headless
HPDFHeadlessXRef fornece a indexação validada de xref-streams e object-streams usada por THPDFHeadlessDocument; dicionários e headers de object-streams usam o parser compartilhado de objetos, enquanto campos big-endian usam o leitor compartilhado de bytes Direct File
HPDFHeadlessDecodeXRefRows(Dictionary, DecodedBytes, MaxObjects, CancellationToken) lê as entradas diretas Type, Size, W e o Index opcional depois que o chamador decodificou filters e predictors
THPDFHeadlessXRefRows é um array de records THPDFHeadlessXRefRow contendo ObjectNumber e o THPDFDirectXrefEntry compartilhado como Entry; os kinds de entradas zero, um e dois identificam objetos free, diretos e comprimidos
Larguras variam de zero a oito bytes, campos omitidos usam os defaults do PDF, offsets retêm a precisão Int64, e sobreposição de subseções, mismatch de comprimento de payload, gerações fora da faixa e overflow sem sinal são rejeitados antes de indexar objetos
HPDFHeadlessReadObjectStreamIndex(Dictionary, DecodedBytes, MaxObjects, MaxDecodedBytes, CancellationToken) valida Type=ObjStm, N e First diretos, e depois parseia o header numérico pelo parser compartilhado
THPDFHeadlessObjectStreamMembers é um array de records THPDFHeadlessObjectStreamMember com ObjectNumber, Offset do payload decodificado com base zero e Length positiva; números de objetos duplicados, pares não inteiros, offsets inválidos e orçamentos configurados são rejeitados
HPDFHeadlessObjectStreamBody(Members, DecodedBytes, MemberIndex, ExpectedObjectNumber) retorna o slice exato do membro após checar o número de membro autoritativo do xref contra o header do container; o chamador do documento parseia esse slice pelo parser compartilhado
EHPDFHeadlessXRefError reporta uma mensagem e a flag read-only LimitExceeded, enquanto o cancelamento dispara EHPDFOperationCancelled; os chamadores são donos dos dicionários e buffers decodificados, e os arrays retornados contêm records por valor
O provider cuida da indexação de bytes e da validação; precedência de revisões, merging de side-sections híbridas, decodificação de filters, descriptografia, cache de objetos e posse do documento permanecem com o loader do documento
Valores numéricos exatos
O parser compartilhado retém o token original da origem quando a conversão para Single arredondaria o valor ou sua magnitude excede 16777216; os leitores de inteiros de cross-references e object-streams preferem esse token para offsets e índices Int64 exatos, enquanto inteiros exatos pequenos mantêm o caminho de alocação eficiente
Os testes usam o writer compartilhado e PDFs independentes de objetos comprimidos, cobrem offsets de 40 bits, widths/defaults, predictors, faixas esparsas, precedência híbrida, índices de membros malformados e ciclos de revisões, e preservam os thresholds originais de alocação e throughput do parser