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