|
Emite um cross-reference stream /Type /XRef do PDF 1.5 (ISO 32000-1 7.5.8) em vez da sequência textual xref ... trailer. O payload do contêiner é comprimido com Flate e predição PNG Up (/DecodeParms /Predictor 12), as larguras de campo em /W se adaptam à faixa real de offsets (alargando além de 4 GiB em vez de truncar) e os buracos de free-list colapsam em subseções /Index, para que números de objeto esparsos pareçam custar uma linha cada.
Sintaxe Delphi:
property UseXRefStream: Boolean;
Sintaxe C++:
__property bool UseXRefStream;
Descrição
Quando UseXRefStream é true, EndDoc grava um único objeto de stream indireto /Type /XRef em vez da sequência legada de tabela textual xref + trailer + startxref. As entradas usam /W [1 4 2]: um campo de tipo de um byte, um offset de quatro bytes (ou número do objeto hospedeiro comprimido) e uma geração de dois bytes (ou índice do objeto comprimido). A tabela inteira é comprimida com FlateDecode, tipicamente cortando a sobrecarga de xref em 4-10x em documentos grandes.
XRef streams são um pré-requisito duro para a feature de UseObjectStreams: apenas o xref stream binário pode codificar as entradas type-2 de objetos comprimidos que apontam para contêineres /Type /ObjStm. Desligar UseXRefStream desativa automaticamente UseObjectStreams no momento de salvar.
Default value: false (opt-in — mantém a tabela textual de xref para ferramentas que fixam no código a palavra-chave xref e para máxima compatibilidade com PDF 1.4 / leitores anteriores).
Definir UseXRefStream como true em um documento cujo Version está abaixo do PDF 1.5 é silenciosamente ignorado no momento de salvar — o xref textual é emitido em vez disso.
O PDF/A-1 força o xref textual também: a ISO 19005-1 é construída sobre o PDF 1.4 e a cláusula 6.1.4 proíbe cross-reference streams, de modo que quando PDFACompliance nomeia um nível part-1 (como 'B' ou 'A') o EndDoc limpa UseXRefStream e UseObjectStreams ao salvar, independentemente de como estavam definidos; o PDF/A-2 e o PDF/A-3 são construídos sobre o PDF 1.7 e continuam honrando ambos
Exemplo 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;
See Also
UseObjectStreams, Compression, Version, PDF Filter Support
|