Spannenbasiertes Parsen einfacher Objekte

Die Unit HPDFParser parst eigenständige PDF-Wörterbücher und -Arrays, ohne Teilzeichenfolgen von Token oder verschachtelten Containern zu kopieren

Einstiegspunkte

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;

Das zurückgegebene Wörterbuch oder Array gehört dem Aufrufer und enthält normale, beständige HotPDF-Objekte ohne Abhängigkeit von der Lebensdauer der Quellzeichenfolge

Ansichtsstatistik

THPDFParserViewStatistics stellt SourceBytes, TokenViewCount, MaterializedStringCount, MaterializedBytes, ObjectCount, ContainerCount, MaxDepth, ErrorCount und Valid bereit

Tokenansichten zählen begrenzte Quellbereiche, während die Zähler für materialisierte Zeichenfolgen die in dauerhafte PDF-Namen, Schlüssel und Zeichenfolgen kopierten Bytes erfassen

Unterstützte Objekte

Der Parser erkennt Namen, Ganzzahlen, reelle Zahlen, boolesche Werte, Nullwerte, indirekte Referenzen, Literalzeichenfolgen, hexadezimale Zeichenfolgen, Arrays und Wörterbücher

Literalzeichenfolgen bewahren verschachtelte Klammern, maskierte Trennzeichen, oktale Maskierungen und maskierte Zeilenfortsetzungen, während PDF-Leerraum und Kommentare ignoriert werden

Nicht maskierte CR-, CRLF- und LF-Zeilenenden innerhalb von Literalzeichenfolgen dekodieren zu einem LF je Zeilenende; escapte Wagenrückläufe wie \r oder \015 bleiben CR-Bytes, und Backslash-Zeilenfortsetzungen fügen keine Bytes hinzu

Verschachtelte Container teilen sich einen Cursor über die unveränderliche Eingabe, die Rekursion ist begrenzt, und doppelte Wörterbuchschlüssel ersetzen bei Groß-/Kleinschreibungssensitivität frühere Werte

Fehlerhafte Trennzeichen schieben den Wiederherstellungs-Cursor weiter, ohne benachbarte gültige Token zu überspringen; Array-Inhalte ohne öffnende Klammer erholen sich ebenfalls von überzähligen schließenden Klammern und melden sie in ErrorCount

Leistungsmerkmale

Namen und Zeichenfolgen werden einmal an ihrer dauerhaften Objektgrenze materialisiert, die numerische Konvertierung liest Quellbytes direkt, und ein operationslokaler Index mit offener Adressierung verhindert quadratische Duplikatsuchen beim Aufbau großer Wörterbücher

Ein Win32-Regressionsfixture mit 30.000 Paaren verringerte die Allokationsbytes über fünf Durchläufe von 50.866.510 auf 17.936.800 und die Laufzeit von 3.656 ms auf 46 ms

Siehe auch: Skalierbares PDF-Laden mit wahlfreiem Zugriff, Begrenzte Budgets für den PDF-Parser