Propriété THotPDF.UseXRefStream

 

THotPDF.UseXRefStream

THotPDF

 

Haut  Précédent  Suivant

Émet un flux de références croisées PDF 1.5 /Type /XRef (ISO 32000-1 7.5.8) à la place de la séquence textuelle xref ... trailer. La charge utile du conteneur est compressée en Flate avec prédiction PNG Up (/DecodeParms /Predictor 12), les largeurs de champs dans /W s'adaptent à la plage réelle des offsets (élargies au-delà de 4 GiB au lieu d'être tronquées), et les trous de la liste libre se replient en sous-sections /Index afin que les numéros d'objets clairsemés ne coûtent plus une ligne chacun

 

Syntaxe Delphi :

property UseXRefStream: Boolean;

 

Syntaxe C++ :

__property bool UseXRefStream;

 

Description

Lorsque UseXRefStream est activé, EndDoc écrit un seul objet flux indirect /Type /XRef au lieu de l’ancienne séquence textuelle xref + trailer + startxref. Les entrées utilisent /W [1 4 2] : un champ de type d’un octet, un décalage de quatre octets, ou le numéro d’hôte d’un objet compressé, et une génération de deux octets, ou l’index d’un objet compressé. L’ensemble de la table est compressé FlateDecode, ce qui réduit typiquement la surcharge xref d’un facteur 4 à 10 sur les gros documents

 

Les flux XRef sont une condition préalable stricte à la fonctionnalité UseObjectStreams : seul le flux xref binaire peut encoder les entrées d’objets compressés de type 2 qui pointent vers des conteneurs /Type /ObjStm. La désactivation de UseXRefStream désactive automatiquement UseObjectStreams au moment de l’enregistrement

 

Valeur par défaut : false, en activation explicite, ce qui conserve la table xref textuelle pour les outils qui codent en dur le mot-clé xref et pour une compatibilité maximale avec PDF 1.4 et les lecteurs antérieurs

Le réglage de UseXRefStream à true sur un document dont la Version est inférieure à PDF 1.5 est ignoré silencieusement à l’enregistrement ; la xref textuelle est émise à la place

 

PDF/A-1 force également la xref textuelle : ISO 19005-1 repose sur PDF 1.4 et la clause 6.1.4 interdit les flux de références croisées, si bien que lorsque PDFACompliance désigne un niveau part-1 (tel que 'B' ou 'A'), EndDoc efface UseXRefStream et UseObjectStreams à l’enregistrement quel que soit leur réglage ; PDF/A-2 et PDF/A-3 reposent sur PDF 1.7 et continuent de les honorer

 

Exemple de code

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;

 

Voir aussi

UseObjectStreams, Compression, Version, Prise en charge des filtres PDF