以 Span 為基礎的簡單物件解析

HPDFParser 單元解析獨立的 PDF 字典與陣列,不複製 token 或巢狀容器的子字串

進入點

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

token 檢視統計有界的來源範圍,具體化字串計數器則涵蓋複製進常駐 PDF 名稱、鍵與字串的位元組

支援的物件

解析器可識別名稱、整數、實數、布林、null、間接參照、字面字串、十六進位字串、陣列與字典

字面字串保留巢狀括號、跳脫分隔符、八進位跳脫與跳脫的換行接續,PDF 空白與註解則被忽略

字面字串內未跳脫的 CR、CRLF 與 LF 換行,每個換行解碼成一個 LF;\r 或 \015 這類跳脫的歸位字元仍保留 CR 位元組,反斜線換行接續則不增加任何位元組

巢狀容器在不變輸入上共用一個游標,遞迴有上界,重複的字典鍵以區分大小寫的方式取代較早的值

格式錯誤的分隔符會推進復原游標,但不會跳過相鄰的有效 token;沒有開頭括號的陣列內容也能從多餘的右括號復原,並把它們計入 ErrorCount

效能特性

名稱與字串在其常駐物件邊界具體化一次,數值轉換直接讀取來源位元組,操作本地的開放定址索引則避免建構大型字典時的平方級重複掃描

30,000 對的 Win32 回歸測試案例把五趟配置位元組從 50,866,510 降到 17,936,800,耗時從 3,656 ms 降到 46 ms

另請參閱: 可擴充與隨機存取 PDF 載入, 有界 PDF 解析器預算