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