Span Tabanlı Basit-Object Parsing

HPDFParser unit'i, token veya iç içe container alt dizelerini kopyalamadan bağımsız PDF dictionary ve array'lerini ayrıştırır

Giriş noktaları

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;

Döndürülen dictionary veya array çağıranın mülkiyetindedir ve kaynak string'in ömrüne bağımlılığı olmayan normal kalıcı HotPDF object'leri içerir

View istatistikleri

THPDFParserViewStatistics, SourceBytes, TokenViewCount, MaterializedStringCount, MaterializedBytes, ObjectCount, ContainerCount, MaxDepth, ErrorCount ve Valid alanlarını dışa açar

Token view'ları sınırlı kaynak aralıklarını sayar; materialise edilen string sayaçları ise kalıcı PDF name, key ve string'lere kopyalanan baytları kapsar

Desteklenen object'ler

Parser, name'leri, tamsayıları, gerçek sayıları, boolean'ları, null'ları, indirect reference'ları, literal string'leri, onaltılık string'leri, array'leri ve dictionary'leri tanır

Literal string'ler, iç içe parantezleri, escape edilmiş ayırıcıları, sekizlik escape'leri ve escape edilmiş satır devamını korur; PDF whitespace'i ve yorumları yok sayılır

Literal string'lerin içindeki escape edilmemiş CR, CRLF ve LF satır sonları, her satır sonu için bir LF'e çözümlenir; \r veya \015 gibi escape edilmiş satır başları CR bayt olarak kalır ve ters bölü satır devamları bayt eklemez

İç içe container'lar değişmez girdi üzerinde tek bir imleci paylaşır, özyineleme sınırlıdır ve yinelenen dictionary key'leri büyük/küçük harfe duyarlı eşleşmeyle önceki değerlerin üzerine yazar

Bozuk ayırıcılar, komşu geçerli token'ları atlamadan kurtarma imlecini ilerletir; açma parantezi olmadan verilen array gövdeleri ayrıca başıboş kapatma parantezlerinden kurtulur ve onları ErrorCount içinde bildirir

Performans özellikleri

Name'ler ve string'ler kalıcı object sınırlarında bir kez materialise edilir, sayısal dönüşüm kaynak baytlarını doğrudan okur ve operasyona yerel bir open-addressed indeks, büyük dictionary'ler inşa edilirken karesel yinelenen taramaları önler

30.000 çiftli Win32 regression fixture'ı, beş geçişli tahsis baytlarını 50,866,510'dan 17,936,800'e, geçen süreyi 3,656 ms'den 46 ms'ye indirdi

Ayrıca bkz.: Ölçeklenebilir ve Rastgele Erişimli PDF Yükleme, Sınırlı PDF Parser Bütçeleri