Análise de objetos simples baseada em extensão

A unidade HPDFParser analisa dicionários e arrays PDF independentes sem copiar substrings de token ou contêiner aninhado

Pontos de entrada

function HPDFParserParseSimpleDictionary(
  const Data: AnsiString;
  RecursionLevel: Integer = 0): THPDFDictionaryObject;

function HPDFParserParseSimpleDictionaryWithStatistics(
  const Data: AnsiString;
  out Statistics: THPDFParserViewStatistics;
  RecursionLevel: Integer = 0): THPDFDictionaryObject;

function HPDFParserParseSimpleArray(
  const Data: AnsiString): THPDFArrayObject;

function HPDFParserParseSimpleArrayWithStatistics(
  const Data: AnsiString;
  out Statistics: THPDFParserViewStatistics): THPDFArrayObject;

O dicionário ou array retornado é de propriedade do chamador e contém objetos HotPDF persistentes normais sem dependência do tempo de vida da string de origem

Estatísticas de visualização

THPDFParserViewStatistics expõe SourceBytes, TokenViewCount, MaterializedStringCount, MaterializedBytes, ObjectCount, ContainerCount, MaxDepth, ErrorCount e Valid

Visualizações de token contam intervalos de origem limitados, enquanto contadores de string materializada cobrem bytes copiados em nomes, chaves e strings PDF duráveis

Objetos suportados

O analisador reconhece nomes, inteiros, números reais, booleanos, nulos, referências indiretas, strings literais, strings hexadecimais, arrays e dicionários

Strings literais preservam parênteses aninhados, delimitadores escapados, escapes octais e continuações de linha escapadas, enquanto espaços em branco e comentários PDF são ignorados

Line endings CR, CRLF e LF sem escape dentro de strings literais decodificam para um LF por line ending; retornos de carro escapados como \r ou \015 permanecem bytes CR, e continuações de linha com barra invertida não adicionam bytes

Contêineres aninhados compartilham um cursor sobre a entrada imutável, a recursão é limitada e chaves de dicionário duplicadas substituem valores anteriores com correspondência sensível a maiúsculas e minúsculas

Delimitadores malformados avançam o cursor de recuperação sem pular tokens válidos adjacentes; corpos de array fornecidos sem um colchete de abertura também se recuperam de colchetes de fechamento perdidos e os reportam no ErrorCount

Características de desempenho

Nomes e strings materializam uma vez em seu limite de objeto persistente, a conversão numérica lê bytes de origem diretamente e um índice de endereçamento aberto local à operação impede varreduras quadráticas de duplicatas ao construir dicionários grandes

Um fixture de regressão Win32 de 30.000 pares reduziu os bytes de alocação de cinco passagens de 50.866.510 para 17.936.800 e o tempo decorrido de 3.656 ms para 46 ms

Veja também: Scalable and Random-Access PDF Loading, Bounded PDF Parser Budgets