|
É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
|