THotPDF.UseObjectStreams Property

 

THotPDF.UseObjectStreams

THotPDF

 

Topo  Anterior  Próxima

Empacota objetos indiretos elegíveis em streams de contêiner /Type /ObjStm do PDF 1.5 (ISO 32000-1 7.5.7) para cortar o tamanho do PDF no disco.

 

Sintaxe Delphi:

property UseObjectStreams: Boolean;

 

Sintaxe C++:

__property bool UseObjectStreams;

 

Descrição

Quando UseObjectStreams é true (e UseXRefStream também é true), EndDoc empacota todo objeto indireto elegível — dicionários, arrays, números, nomes, strings, booleanos, nulls — em um ou mais streams de contêiner /Type /ObjStm conforme a ISO 32000-1 7.5.7. O cross-reference stream então referencia os objetos empacotados por meio de entradas type-2 (número de objeto do ObjStm hospedeiro + índice da entrada dentro desse stream), de modo que os bytes de enquadramento individuais de N G obj ... endobj e as entradas textuais de xref por linha são eliminados.

 

Combina naturalmente com a propriedade UseXRefStream para o pipeline gerador mais compacto de PDF 1.5+. O empacotador ObjStm deixa objetos de stream, o dicionário de criptografia e os dicionários Catalog e Info apontados pelo trailer sem compressão, de modo que mesmo parsers PDF mínimos ainda possam localizar as raízes do documento e descriptografar o conteúdo.

 

Default value: false (opt-in).

Definir UseObjectStreams como true rebaixa silenciosamente para false quando UseXRefStream está desligado (entradas type-2 não são representáveis na tabela textual de xref conforme a spec) ou quando Version está abaixo do PDF 1.5.

 

Também é forçado a desligar sob PDF/A-1: a ISO 19005-1 (PDF 1.4, cláusula 6.1.4) proíbe object streams comprimidos junto com os cross-reference streams em que eles viajam, de modo que o EndDoc emite uma tabela de xref clássica sempre que PDFACompliance nomeia um nível part-1, enquanto o PDF/A-2 e o PDF/A-3 (PDF 1.7) o mantêm disponível

 

Exemplo de código

HPDF := THotPDF.Create( nil );
try
  HPDF.FileName := 'c:\Output.pdf';
  HPDF.Version := pdf15;          // Object streams require PDF 1.5+
  HPDF.UseXRefStream := true;     // ObjStm references need a /Type /XRef stream
  HPDF.UseObjectStreams := true;  // Pack indirect 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;

 

Redução de tamanho

Em documentos dominados por dicionários indiretos pequenos (documentos multi-página, anotações, widgets AcroForm, elementos de árvore de estrutura, camadas de Optional Content), a economia é tipicamente de 20-40% do tamanho do arquivo pós-FlateDecode. Um smoke test de 30 páginas só de gráficos encolhe de 14502 bytes para 8488 bytes (-41,5%).

 

See Also

UseXRefStream, Compression, Version, PDF Filter Support