|
Emite um stream de cross-reference PDF 1.5 /Type /XRef (ISO 32000-1 7.5.8) em vez da sequência textual xref ... trailer. O payload do contentor é comprimido com Flate e predição PNG Up (/DecodeParms /Predictor 12), as larguras de campo em /W adaptam-se ao intervalo real de offsets (alargam acima de 4 GiB em vez de truncar) e os buracos na lista de objetos livres colapsam em subsecções /Index, para que números de objeto esparsos deixem de custar uma linha cada
Delphi syntax:
property UseXRefStream: Boolean;
C++ syntax:
__property bool UseXRefStream;
Descrição
Quando UseXRefStream é true, EndDoc escreve um único objeto de fluxo indireto /Type /XRef em vez da sequência textual legada xref + trailer + startxref. As entradas usam /W [1 4 2]: um campo de tipo de 1 byte, um offset de 4 bytes (ou número de objeto anfitrião comprimido) e uma geração de 2 bytes (ou índice de objeto comprimido). A tabela inteira é comprimida com FlateDecode, reduzindo normalmente a sobrecarga xref em 4 a 10 vezes em documentos grandes
Os streams XRef são um pré-requisito obrigatório para a funcionalidade UseObjectStreams: apenas o stream xref binário pode codificar as entradas de objetos comprimidos do tipo 2 que apontam para contentores /Type /ObjStm. Desligar UseXRefStream desativa automaticamente UseObjectStreams no momento de guardar
Valor predefinido: false (opt-in - mantém a tabela xref textual para ferramentas que têm a palavra-chave xref hardcoded e para compatibilidade máxima com PDF 1.4 / leitores anteriores)
Definir UseXRefStream como true num documento cuja Version esteja abaixo de PDF 1.5 é ignorado silenciosamente no momento de guardar - é emitido o xref textual em vez disso
O PDF/A-1 também força o xref textual: a ISO 19005-1 é baseada no PDF 1.4 e a cláusula 6.1.4 proíbe streams de cross-reference, por isso quando PDFACompliance indica um nível part-1 (como 'B' ou 'A'), o EndDoc limpa UseXRefStream e UseObjectStreams no momento de guardar, independentemente de como estavam definidos; PDF/A-2 e PDF/A-3 são baseados no PDF 1.7 e continuam a respeitar 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;
See Also
UseObjectStreams, Compression, Version, PDF Filter Support
|