THotPDF.UseObjectStreams Property

 

THotPDF.UseObjectStreams

THotPDF

 

Topo  Anterior  Próximo

Pack eligible indirect objects into PDF 1.5 /Type /ObjStm container streams (ISO 32000-1 7.5.7) to cut on-disk PDF size.

 

Sintaxe Delphi:

property UseObjectStreams: Boolean;

 

Sintaxe C++:

__property bool UseObjectStreams;

 

Descrição

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

 

Associa-se naturalmente ao UseXRefStream propriedade para o pipeline do gravador PDF 1.5+ mais compacto. O compactador ObjStm deixa os objetos de fluxo, o dicionário de criptografia e os dicionários Catalog e Info apontados pelo trailer não compactados, de modo que até parsers de PDF mínimos ainda possam localizar as raízes do documento e descriptografar o conteúdo.

 

Default value: false (opt-in).

A configuração de UseObjectStreams como verdadeiro recai silenciosamente para falso quando UseXRefStream está desligado (entradas tipo 2 não são representáveis na tabela xref textual de acordo com a especificação) ou quando Version está abaixo do PDF 1.5.

 

Também é forçado a desligar em PDF/A-1: a norma ISO 19005-1 (PDF 1.4, cláusula 6.1.4) proíbe fluxos de objetos compactados junto dos fluxos de referência cruzada que eles utilizam; portanto, EndDoc emite uma tabela xref clássica sempre que PDFACompliance nomeia um nível da parte 1, enquanto PDF/A-2 e PDF/A-3 (PDF 1.7) deixam o recurso disponível

 

Code Example

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;

 

Size reduction

Em documentos dominados por pequenos dicionários indiretos (documentos de várias páginas, anotações, widgets AcroForm, elementos de árvore de estrutura, camadas de conteúdo opcional) a economia é normalmente de 20-40% do tamanho do arquivo pós-FlateDecode. Um teste gráfico de 30 páginas reduz de 14502 bytes para 8488 bytes (-41.5%).

 

See Also

UseXRefStream, Compression, Version, PDF Filter Support