THotPDF.UseObjectStreams Property

 

THotPDF.UseObjectStreams

THotPDF

 

顶部  上一页  下一页

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

 

Delphi 语法:

property UseObjectStreams: Boolean;

 

C++ 语法:

__property bool UseObjectStreams;

 

说明

UseObjectStreams 为 true(且 UseXRefStream 也为 true)时,EndDoc 按 ISO 32000-1 7.5.7 把每个符合条件的间接对象——字典、数组、数字、名称、字符串、布尔、null——打包进一个或多个 /Type /ObjStm 容器流。交叉引用流随后经 type-2 条目引用打包对象(宿主 ObjStm 对象号 + 流内条目索引),因此单独的 N G obj ... endobj 框架字节和逐行文本 xref 条目被消除。

 

与 UseXRefStream 属性天然搭配,构成最紧凑的 PDF 1.5+ 写入管线。ObjStm 打包器让流对象、加密字典以及 trailer 指向的 Catalog 与 Info 字典保持未压缩,即便最小的 PDF 解析器也能定位文档根并解密内容。

 

默认值: false(可选开启)。

UseXRefStream 关闭时(type-2 条目按规范无法在文本 xref 表中表示),或 Version 低于 PDF 1.5 时,把 UseObjectStreams 设为 true 会静默降级为 false。

 

PDF/A-1 下还会被强制关闭:ISO 19005-1(PDF 1.4,第 6.1.4 条)禁止压缩对象流与其依托的交叉引用流,因此只要 PDFACompliance 指定 part-1 级别,EndDoc 就输出经典 xref 表;PDF/A-2 与 PDF/A-3(PDF 1.7)下仍可用

 

代码示例

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

对于由小型 indirect dictionaries 主导的文档(多页文档、annotations、AcroForm widgets、structure-tree elements、Optional Content layers),节省通常可达到 post-FlateDecode 文件大小的 20-40%。30 页 graphics-only smoke test 从 14502 bytes 缩小到 8488 bytes(-41.5%)

 

另请参阅

UseXRefStream, Compression, Version, PDF 过滤器支持