|
Geeft een PDF 1.5 /Type /XRef-kruisverwijzingsstream uit (ISO 32000-1 7.5.8) in plaats van de tekstuele xref ... trailer-reeks. De containerpayload is Flate-gecomprimeerd met PNG Up-predictie (/DecodeParms /Predictor 12), veldbreedtes in /W passen zich aan het werkelijke offsetbereik aan (verbreding voorbij 4 GiB in plaats van afkappen) en vrije-lijstgaten vallen samen in /Index-subsecties zodat schaarse objectnummers niet per stuk één regel kosten.
Delphi-syntax:
property UseXRefStream: Boolean;
C++-syntax:
__property bool UseXRefStream;
Description
Wanneer UseXRefStream true is, schrijft EndDoc één /Type /XRef-indirect streamobject in plaats van de legacy tekstuele xref-tabel + trailer + startxref-reeks. Regels gebruiken /W [1 4 2]: een één-byte typeveld, een vier-byte offset (of nummer van het gecomprimeerde-objecthost) en een twee-byte generatie (of gecomprimeerd-objectindex). De hele tabel is FlateDecode-gecomprimeerd, wat de xref-overhead op grote documenten typisch met 4-10x verkleint.
XRef-streams zijn een harde voorwaarde voor de functie UseObjectStreams: alleen de binaire xref-stream kan de type-2 gecomprimeerde-objectregels coderen die naar /Type /ObjStm-containers wijzen. UseXRefStream uitzetten schakelt UseObjectStreams automatisch uit bij het opslaan.
Standaardwaarde: false (opt-in - houdt de tekstuele xref-tabel voor tooling die het xref-sleutelwoord hard-codeert en voor maximale compatibiliteit met PDF 1.4 / eerdere lezers).
UseXRefStream op true zetten op een document waarvan Version onder PDF 1.5 zit wordt bij het opslaan geruisloos genegeerd - in plaats daarvan wordt de tekstuele xref uitgegeven.
PDF/A-1 dwingt ook de tekstuele xref af: ISO 19005-1 is gebouwd op PDF 1.4 en clausule 6.1.4 verbiedt kruisverwijzingsstreams, dus wanneer PDFACompliance een part-1-niveau noemt (zoals 'B' of 'A') wist EndDoc UseXRefStream en UseObjectStreams bij het opslaan hoe ze ook zijn ingesteld; PDF/A-2 en PDF/A-3 zijn gebouwd op PDF 1.7 en blijven beide eren
Codevoorbeeld
HPDF := THotPDF.Create( nil ); try HPDF.FileName := 'c:\Output.pdf'; HPDF.Version := pdf15; // Required for XRef streams HPDF.UseXRefStream := true; // Emit /Type /XRef instead of xref table HPDF.UseObjectStreams := true; // Optional: also pack objects into /Type /ObjStm HPDF.Compression := cmFlateDecode; HPDF.BeginDoc; HPDF.CurrentPage.TextOut( 100, 100, 0, 'Compact PDF 1.5 output' ); HPDF.EndDoc; finally HPDF.Free; end;
Zie ook
UseObjectStreams, Compression, Version, PDF-filterondersteuning
|