THotPDF.UseXRefStream Property

 

THotPDF.UseXRefStream

THotPDF

 

Κορυφή  Προηγούμενο  Επόμενο

Εκπέμπει PDF 1.5 /Type /XRef cross-reference stream (ISO 32000-1 7.5.8) αντί για την κειμενική ακολουθία xref ... trailer. Το payload του container συμπιέζεται με Flate και πρόβλεψη PNG Up (/DecodeParms /Predictor 12), τα πλάτη των πεδίων στο /W προσαρμόζονται στο πραγματικό εύρος των offsets (διευρύνονται πέρα από 4 GiB αντί να περικόπτονται) και οι τρύπες του free-list καταρρέουν σε υποενότητες /Index, ώστε τα αραιά νούμερα αντικειμένων να μην κοστίζουν πλέον από μία γραμμή το καθένα

 

Delphi syntax:

property UseXRefStream: Boolean;

 

C++ syntax:

__property bool UseXRefStream;

 

Περιγραφή

Όταν το UseXRefStream είναι true, το EndDoc γράφει ένα μοναδικό /Type /XRef indirect stream object αντί για την legacy textual xref table + trailer + startxref sequence. Οι entries χρησιμοποιούν /W [1 4 2]: ένα one-byte type field, ένα four-byte offset (ή compressed-object host number) και ένα two-byte generation (ή compressed-object index). Ολόκληρος ο πίνακας συμπιέζεται με FlateDecode, μειώνοντας συνήθως το xref overhead κατά 4-10x σε μεγάλα έγγραφα

 

Τα XRef streams είναι αυστηρή προϋπόθεση για τη λειτουργία UseObjectStreams: μόνο το binary xref stream μπορεί να κωδικοποιήσει type-2 compressed-object entries που δείχνουν σε /Type /ObjStm containers. Η απενεργοποίηση του UseXRefStream απενεργοποιεί αυτόματα το UseObjectStreams κατά την αποθήκευση

 

Προεπιλεγμένη τιμή: false (opt-in - διατηρεί την textual xref table για tooling που έχει hard-coded το xref keyword και για μέγιστη συμβατότητα με PDF 1.4 / παλαιότερους readers)

Η ρύθμιση του UseXRefStream σε true σε έγγραφο του οποίου το Version είναι κάτω από PDF 1.5 αγνοείται σιωπηρά κατά την αποθήκευση - εκπέμπεται αντί αυτού το textual xref

 

Παράδειγμα κώδικα

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