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