|
Emite un stream de referencias cruzadas /Type /XRef de PDF 1.5 (ISO 32000-1 7.5.8) en lugar de la secuencia textual xref ... trailer. La carga del contenedor se comprime con Flate y predicción PNG Up (/DecodeParms /Predictor 12), los anchos de campo en /W se adaptan al rango real de offsets (ampliándose más allá de 4 GiB en vez de truncarse), y los huecos de la lista libre se colapsan en subsecciones /Index para que los números de objeto dispersos dejen de costar una fila cada uno.
Sintaxis Delphi:
property UseXRefStream: Boolean;
Sintaxis C++:
__property bool UseXRefStream;
Descripción
Cuando UseXRefStream es true, EndDoc escribe un único objeto de stream indirecto /Type /XRef en lugar de la secuencia legada de tabla xref textual + trailer + startxref. Las entradas usan /W [1 4 2]: un campo de tipo de un byte, un offset de cuatro bytes (o número de anfitrión de objeto comprimido) y una generación de dos bytes (o índice de objeto comprimido). Toda la tabla se comprime con FlateDecode, reduciendo típicamente la sobrecarga xref entre 4 y 10 veces en documentos grandes.
Los XRef streams son un prerrequisito estricto de la característica UseObjectStreams: solo el xref stream binario puede codificar las entradas de tipo 2 de objetos comprimidos que apuntan a contenedores /Type /ObjStm. Desactivar UseXRefStream deshabilita automáticamente UseObjectStreams al guardar.
Valor por defecto: false (opcional - conserva la tabla xref textual para herramientas que tienen el xref fijo en el código y para la máxima compatibilidad con PDF 1.4 / lectores anteriores).
Asignar UseXRefStream a true en un documento cuya Version es anterior a PDF 1.5 se ignora silenciosamente al guardar - en su lugar se emite la xref textual.
PDF/A-1 también fuerza el xref textual: ISO 19005-1 se basa en PDF 1.4 y la cláusula 6.1.4 prohíbe los xref streams, así que cuando PDFACompliance indica un nivel de la parte 1 (como 'B' o 'A'), EndDoc desactiva UseXRefStream y UseObjectStreams al guardar, con independencia de cómo se hayan configurado; PDF/A-2 y PDF/A-3 se basan en PDF 1.7 y siguen respetando ambos
Code Example
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;
Véase también
UseObjectStreams, Compression, Version, PDF Filter Support
|