THotPDF.UseXRefStream Property

 

THotPDF.UseXRefStream

THotPDF

 

Överst  Föregående  Nästa

Emitterar en PDF 1.5 /Type /XRef-korsreferensström (ISO 32000-1 7.5.8) i stället för den textuella xref ... trailer-sekvensen. Behållarens nyttolast Flate-komprimeras med PNG Up-prediktion (/DecodeParms /Predictor 12), fältbredderna i /W anpassas till det faktiska offsetintervallet (breddas förbi 4 GiB i stället för att trunkeras), och hålen i frilistan kollapsar till /Index-undersektioner så att glesa objektnummer inte kostar en rad var

 

Delphi-syntax:

property UseXRefStream: Boolean;

 

C++-syntax:

__property bool UseXRefStream;

 

Beskrivning

När UseXRefStream är true skriver EndDoc ett enda indirekt strömobjekt /Type /XRef i stället för den äldre textuella xref-tabellen + trailer + startxref-sekvensen. Poster använder /W [1 4 2]: ett enbytes typfält, en fyrabytes offset (eller värdnummer för komprimerat objekt) och en tvåbytes generation (eller index för komprimerat objekt). Hela tabellen FlateDecode-komprimeras och minskar normalt xref-overhead 4-10 gånger i stora dokument

 

XRef-strömmar är ett hårt krav för funktionen UseObjectStreams: endast den binära xref-strömmen kan koda typ 2-poster för komprimerade objekt som pekar in i /Type /ObjStm-containrar. Att stänga av UseXRefStream inaktiverar automatiskt UseObjectStreams vid sparning

 

Standardvärde: false (explicit val - behåller den textuella xref-tabellen för verktyg som hårdkodar nyckelordet xref och för maximal kompatibilitet med PDF 1.4 / äldre läsare)

Att sätta UseXRefStream till true i ett dokument vars Version är lägre än PDF 1.5 ignoreras tyst vid sparning - den textuella xref-tabellen emitteras i stället

 

PDF/A-1 tvingar fram den textuella xref-tabellen också: ISO 19005-1 bygger på PDF 1.4 och klausul 6.1.4 förbjuder korsreferensströmmar, så när PDFACompliance anger en del 1-nivå (som 'B' eller 'A') rensar EndDoc UseXRefStream och UseObjectStreams vid sparande oavsett hur de är satta; PDF/A-2 och PDF/A-3 bygger på PDF 1.7 och fortsätter att följa båda

 

Kodexempel

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 även

UseObjectStreams, Compression, Version, PDF Filter Support