THotPDF.CompressDocument

THotPDF

 

屬性  CompactFontSubsetting  EnableFontSubsetting

一個開關,打開所有能讓文件變小的輸出選項

 

Delphi 語法:

property CompressDocument: Boolean;

 

C++ syntax:

__property bool CompressDocument;

 

說明

在 BeginDoc 之前把 CompressDocument 設為 true,下一份文件就會以 HotPDF 做得到的最小體積寫出,外觀不變。針對這份文件,BeginDoc 會開啟:

  • 頁面內容與其他串流以最高壓縮層級做 FlateDecode 壓縮
  • cross-reference stream 加上 object streams,把大多數物件塞進壓縮容器(ISO 32000-1 7.5.7 與 7.5.8);每個容器最多裝 250 個物件而不是 100 個,因為更少、更大的容器壓縮效果更好。透過 ConfigureAdaptiveObjectStreamPacking 設定的上限會保留
  • 字型子集化並搭配緊湊字型子集,讓每個內嵌字型只保留文件實際顯示的字形

object streams 需要 PDF 1.5。Version 較舊時會提高到 PDF 1.5,除非版本被鎖定;PDF/A-1 輸出依照標準要求保留傳統 cross-reference table

 

CompressDocument 不會動你自己選的設定。文件寫出時,EndDoc 會還原 Compression、CompressionLevel、UseXRefStream、UseObjectStreams、EnableFontSubsetting、CompactFontSubsetting、每容器物件數上限與版本提升的原值,所以下一份不開 CompressDocument 的文件照舊寫出。影像維持自己的壓縮設定,不會被重新取樣,也不會做有損再壓縮

 

屬性預設關閉。一份三頁、Arial 與 SimSun 中英混排的文件,體積從約 10 MB 掉到約 20 KB,大頭是字型子集化。代價是輸出之後不好再編輯:子集字型顯示不了文件沒用到的字元,壓縮過的 object streams 也沒辦法用純文字編輯器直接讀

 

範例:

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

 

請參閱: CompactFontSubsetting, EnableFontSubsetting, CompressLoadedDocument