|
Skriv en PDF 1.5 /Type /XRef-cross-reference-strøm (ISO 32000-1 7.5.8) i stedet for den tekstlige sekvensen xref ... trailer. Nyttelasten i beholderen komprimeres med Flate og PNG Up-prediksjon (/DecodeParms /Predictor 12), feltbreddene i /W tilpasser seg det faktiske offsetsområdet (de utvides over 4 GiB i stedet for å kuttes av), og hullene i fri-listen kollapser til /Index-underseksjoner slik at spredte objektnumre ikke lenger koster én rad hver
Delphi-syntaks:
property UseXRefStream: Boolean;
C++-syntaks:
__property bool UseXRefStream;
Beskrivelse
Når UseXRefStream er true, skriver EndDoc ett enkelt indirekte strømobjekt av typen /Type /XRef i stedet for den eldre tekstlige sekvensen xref-tabell + trailer + startxref. Oppføringene bruker /W [1 4 2]: ett typefelt på én byte, en offset på fire byte (eller vertsnummeret for et komprimert objekt) og en generasjon på to byte (eller indeksen for et komprimert objekt). Hele tabellen FlateDecode-komprimeres, noe som vanligvis kutter xref-overhead med 4-10x i store dokumenter
XRef-strømmer er et absolutt krav for funksjonen UseObjectStreams: bare den binære xref-strømmen kan kode type-2-oppføringene for komprimerte objekter som peker inn i /Type /ObjStm-containere. Hvis UseXRefStream slås av, deaktiveres UseObjectStreams automatisk ved lagring
Standardverdi: false (valgfritt - beholder den tekstlige xref-tabellen for verktøy som har xref-nøkkelordet hardkodet og for maksimal kompatibilitet med PDF 1.4 / tidligere lesere)
Hvis UseXRefStream settes til true på et dokument der Version er lavere enn PDF 1.5, ignoreres det stille ved lagring - den tekstlige xref-en skrives i stedet
PDF/A-1 tvinger også frem den tekstlige xref-en: ISO 19005-1 bygger på PDF 1.4, og klausul 6.1.4 forbyr cross-reference-strømmer, så når PDFACompliance angir et part-1-nivå (som 'B' eller 'A'), nullstiller EndDoc UseXRefStream og UseObjectStreams ved lagring uansett hvordan de er satt; PDF/A-2 og PDF/A-3 bygger på PDF 1.7 og fortsetter å respektere begge
Kodeeksempel
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;
Se også
UseObjectStreams, Compression, Version, PDF Filter Support
|