THotPDF.CompressDocument

THotPDF

 

属性  CompactFontSubsetting  EnableFontSubsetting

一个开关打开所有能让文档变小的写出选项

 

Delphi 语法:

property CompressDocument: Boolean;

 

C++ 语法:

__property bool CompressDocument;

 

说明

在 BeginDoc 之前把 CompressDocument 设为 true,下一个文档就会以 HotPDF 所能在不改变外观的前提下达到的最小体积写出。针对该文档,BeginDoc 会开启:

  • 页面内容和其他流以最高压缩级别做 FlateDecode 压缩
  • 交叉引用流加 object stream,把大多数对象装进压缩容器(ISO 32000-1 7.5.7 和 7.5.8);每个容器最多装 250 个对象而不是 100 个——更少更大的容器压缩效果更好。通过 ConfigureAdaptiveObjectStreamPacking 设置的上限会保留
  • 字体子集化(采用紧凑字体子集),每个嵌入字体只保留文档实际显示的字形

object stream 需要 PDF 1.5。Version 较旧时会提升到 PDF 1.5,除非版本被锁定;按标准要求,PDF/A-1 输出保留传统交叉引用表

 

CompressDocument 不会改动你自己选的设置。文档写出后,EndDoc 会恢复 Compression、CompressionLevel、UseXRefStream、UseObjectStreams、EnableFontSubsetting、CompactFontSubsetting、每容器对象数上限以及版本提升的原值,因此下一个不开 CompressDocument 的文档照旧写出。图像保持各自的压缩设置;不会有任何重采样或有损重压缩

 

该属性默认关闭。一份 Arial 加 SimSun、中英文混排的三页文档,体积从约 10 MB 降到约 20 KB,大头来自字体子集化。代价是输出不便于后期编辑:子集字体无法显示文档未用到的字符,压缩后的 object stream 也没法用文本编辑器直接读

 

示例:

PDF.CompressDocument := True;
        PDF.BeginDoc;
        PDF.CurrentPage.SetFont('SimSun', [], 11);
        PDF.CurrentPage.TextOut(40, 80, 0, 'Compressed output');
        PDF.EndDoc;

 

See also: CompactFontSubsetting, EnableFontSubsetting, CompressLoadedDocument