|
Emite un flujo de referencias cruzadas PDF 1.5 /Type /XRef (ISO 32000-1 7.5.8) en lugar de la secuencia textual xref ... trailer. El contenido del contenedor se comprime con Flate y predicción PNG Up (/DecodeParms /Predictor 12), los anchos de campo de /W se adaptan al rango real de offsets (se amplían más allá de 4 GiB en vez de truncarse) y los huecos de la lista libre se colapsan en subsecciones /Index, de modo que los números de objeto dispersos dejan de costar una fila cada uno
Sintaxis Delphi:
property UseXRefStream: Boolean;
Sintaxis C++:
__property bool UseXRefStream;
Descripción
Cuando UseXRefStream está en true, EndDoc escribe un único objeto de flujo indirecto /Type /XRef en lugar de la secuencia heredada de tabla textual xref + trailer + startxref. Las entradas usan /W [1 4 2]: un campo de tipo de un byte, un desplazamiento de cuatro bytes (o número de host de objeto comprimido) y una generación de dos bytes (o índice de objeto comprimido). Toda la tabla se comprime con FlateDecode, lo que normalmente reduce la sobrecarga xref entre 4 y 10 veces en documentos grandes
Los flujos XRef son un requisito indispensable para la función UseObjectStreams: solo el flujo xref binario puede codificar las entradas de objeto comprimido de tipo 2 que apuntan a contenedores /Type /ObjStm. Desactivar UseXRefStream deshabilita automáticamente UseObjectStreams al guardar
Valor predeterminado: false (opcional - conserva la tabla xref textual para herramientas que codifican el literal xref y para máxima compatibilidad con PDF 1.4 / lectores anteriores)
Al establecer UseXRefStream en true en un documento cuya Version está por debajo de PDF 1.5, se ignora en silencio al guardar - en su lugar se emite el xref textual
PDF/A-1 también fuerza la xref textual: ISO 19005-1 se basa en PDF 1.4 y su cláusula 6.1.4 prohíbe los cross-reference streams, así que cuando PDFACompliance nombre un nivel part-1 (como 'B' o 'A') EndDoc limpia UseXRefStream y UseObjectStreams al guardar, se hayan fijado como se hayan fijado; PDF/A-2 y PDF/A-3 se basan en PDF 1.7 y siguen respetando ambos
Ejemplo de código
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, Soporte de filtros PDF
|