THotPDF.UseXRefStream Property

 

THotPDF.UseXRefStream

THotPDF

 

Topo  Anterior  Seguinte

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