|
Emite un flux de cross-reference PDF 1.5 /Type /XRef (ISO 32000-1 7.5.8) în locul secvenței textuale xref ... trailer. Sarcina utilă a containerului este comprimată cu Flate și predicție PNG Up (/DecodeParms /Predictor 12), lățimile câmpurilor din /W se adaptează la intervalul real de offseturi (se lărgesc peste 4 GiB în loc să trunchieze), iar găurile din lista de obiecte libere se colapsează în subsecțiuni /Index astfel încât numerele de obiect rare să nu mai coste câte un rând fiecare
Delphi syntax:
property UseXRefStream: Boolean;
C++ syntax:
__property bool UseXRefStream;
Descriere
Când UseXRefStream este true, EndDoc scrie un singur obiect de flux indirect /Type /XRef în locul secvenței moștenite formate din tabela textuală xref + trailer + startxref. Intrările folosesc /W [1 4 2]: un câmp de tip pe un byte, un offset pe patru bytes (sau numărul obiectului gazdă al obiectului comprimat) și o generație pe doi bytes (sau indexul obiectului comprimat). Întreaga tabelă este comprimată cu FlateDecode, reducând de obicei suprasarcina xref de 4-10 ori la documentele mari
Fluxurile XRef sunt o condiție obligatorie pentru funcția UseObjectStreams: doar fluxul xref binar poate codifica intrările de obiect comprimat de tip 2 care indică spre containere /Type /ObjStm. Oprirea lui UseXRefStream dezactivează automat UseObjectStreams la salvare
Valoare implicită: false (activare opțională - păstrează tabela xref textuală pentru instrumente care folosesc explicit cuvântul-cheie xref și pentru compatibilitate maximă cu PDF 1.4 și cititoare mai vechi)
Setarea UseXRefStream la true pe un document al cărui Version este sub PDF 1.5 este ignorată în tăcere la salvare - în schimb este emis xref textual
PDF/A-1 impune de asemenea tabela xref textuală: ISO 19005-1 se bazează pe PDF 1.4, iar clauza 6.1.4 interzice fluxurile de referințe încrucișate, așa că atunci când PDFACompliance indică un nivel part-1 (cum ar fi 'B' sau 'A'), EndDoc șterge UseXRefStream și UseObjectStreams la salvare, indiferent cum au fost setate; PDF/A-2 și PDF/A-3 se bazează pe PDF 1.7 și continuă să le respecte pe ambele
Exemplu de cod
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;
See Also
UseObjectStreams, Compression, Version, PDF Filter Support
|