Headless Cross References
HPDFHeadlessXRef liefert die validierte xref-stream- und object-stream-Indizierung, die THPDFHeadlessDocument nutzt; Dictionaries und Object-Stream-Header verwenden den gemeinsamen Objektparser, während Big-Endian-Felder den gemeinsamen Direct-File-Byte-Reader nutzen
HPDFHeadlessDecodeXRefRows(Dictionary, DecodedBytes, MaxObjects, CancellationToken) liest direkte Type-, Size-, W- und optionale Index-Einträge, nachdem der Aufrufer Filter und Prädiktoren dekodiert hat
THPDFHeadlessXRefRows ist ein Array aus THPDFHeadlessXRefRow-Records mit ObjectNumber und dem gemeinsamen THPDFDirectXrefEntry als Entry; die Entry-Arten null, eins und zwei identifizieren freie, direkte und komprimierte Objekte
Breiten reichen von null bis acht Bytes, weggelassene Felder nutzen PDF-Defaults, Offsets behalten Int64-Präzision, und Subsection-Überlappungen, Payload-Längen-Diskrepanzen, Out-of-Range-Generationen und Unsigned-Overflow werden zurückgewiesen, bevor Objekte indiziert werden
HPDFHeadlessReadObjectStreamIndex(Dictionary, DecodedBytes, MaxObjects, MaxDecodedBytes, CancellationToken) validiert direkte Type=ObjStm-, N- und First-Einträge und parst dann den numerischen Header über den gemeinsamen Parser
THPDFHeadlessObjectStreamMembers ist ein Array aus THPDFHeadlessObjectStreamMember-Records mit ObjectNumber, nullbasiertem dekodierten Payload-Offset und positiver Length; doppelte Objektnummern, nichtganzzahlige Paare, ungültige Offsets und konfigurierte Budgets werden zurückgewiesen
HPDFHeadlessObjectStreamBody(Members, DecodedBytes, MemberIndex, ExpectedObjectNumber) liefert den exakten Member-Slice, nachdem die autoritative xref-Member-Nummer gegen ihren Container-Header geprüft wurde; der Dokumentaufrufer parst diesen Slice über den gemeinsamen Parser
EHPDFHeadlessXRefError meldet eine Nachricht und ein schreibgeschütztes LimitExceeded-Flag, während Abbruch EHPDFOperationCancelled auslöst; Aufrufer besitzen Dictionaries und dekodierte Puffer, und zurückgegebene Arrays enthalten Wert-Records
Der Provider übernimmt Byte-Indizierung und Validierung; Revisionspräzedenz, Hybrid-Side-Section-Merging, Filter-Dekodierung, Entschlüsselung, Objekt-Caching und Dokument-Ownership bleiben beim Dokumentloader
Exakte Zahlenwerte
Der gemeinsame Parser behält das ursprüngliche Quell-Token bei, wenn die Konvertierung nach Single den Wert runden würde oder seine Größenordnung 16777216 überschreitet; Cross-Reference- und Object-Stream-Integer-Reader bevorzugen dieses Token für exakte Int64-Offsets und -Indizes, während kleine exakte Integer den allokationseffizienten Pfad behalten
Tests nutzen den gemeinsamen Writer und unabhängige komprimierte Objekt-PDFs, decken 40-Bit-Offsets, Breiten/Defaults, Prädiktoren, sparse Ranges, Hybrid-Präzedenz, missgebildete Member-Indizes und Revisionszyklen ab und bewahren die ursprünglichen Parser-Allocations- und Durchsatzschwellen