基于区间的简单对象解析

HPDFParser 单元解析独立 PDF 字典和数组,而不复制令牌或嵌套容器子字符串

入口点

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;

返回的字典或数组由调用方拥有,包含正常的持久 HotPDF 对象,不依赖源字符串生命周期

视图统计

THPDFParserViewStatistics 暴露 SourceBytes、TokenViewCount、MaterializedStringCount、MaterializedBytes、ObjectCount、ContainerCount、MaxDepth、ErrorCount 和 Valid

令牌视图计数有界源范围,而物化字符串计数器覆盖复制到持久 PDF 名称、键和字符串中的字节

支持的对象

解析器识别名称、整数、实数、布尔值、null、间接引用、字面量字符串、十六进制字符串、数组和字典

字面量字符串保留嵌套括号、转义分隔符、八进制转义和转义行延续,而 PDF 空白和注释被忽略

字面量字符串内未经转义的 CR、CRLF 和 LF 行尾一律解码为每行尾一个 LF;\r 或 \015 这类转义的回车仍保持 CR 字节,反斜杠行延续则不产生任何字节

嵌套容器在不可变输入上共享一个游标,递归有界,重复字典键以区分大小写的匹配替换较早的值

畸形分隔符只推进恢复游标,不跳过相邻的有效令牌;没有起始方括号的数组体也能从多余的闭合方括号中恢复,并把它们计入 ErrorCount

性能特征

名称和字符串在其持久对象边界处物化一次,数值转换直接读取源字节,操作本地的开放寻址索引在构建大字典时防止二次重复扫描

30,000 对的 Win32 回归夹具将五遍分配字节从 50,866,510 减少到 17,936,800,运行时间从 3,656 ms 减少到 46 ms

另请参阅: 可扩展与随机访问 PDF 加载、有界 PDF 解析器预算