持久化字型子集快取
持久化字型子集快取可避免重複執行昂貴的 TrueType 或 OpenType 子集化——只要後續文件用到相同的字型內容與字形集
設定
property FontSubsetCacheFolder: AnsiString;
property FontSubsetCacheMaxBytes: Int64;
function GetFontSubsetCacheInfo: THPDFFontSubsetCacheInfo;
procedure ClearFontSubsetCache;
空的 FontSubsetCacheFolder 會停用磁碟快取,但不改變字型輸出
FontSubsetCacheMaxBytes 預設 256 MiB,執行期可調小,調小會立即觸發最近最少使用(LRU)驅逐
統計
THPDFFontSubsetCacheInfo 包含 HitCount、MissCount、WriteCount、EvictionCount、CorruptCount、RejectedCount、WriteFailureCount、CurrentBytes 與 FileCount
正確性與復原
- 只有字型內容、使用的字形、子集模式與快取 schema 全部相符時才可能快取命中
- 精簡的子集項目保留 PDF/A 字型字典所需的 CID 重對應資料
- 格式錯誤或被截斷的項目會在子集進入 PDF 串流之前被拒絕並移除
- 快取失敗會退回一般的記憶體內子集化,絕不阻擋文件產生
- 原子化取代讓讀取端看不到寫到一半的項目
範例
var
Info: THPDFFontSubsetCacheInfo;
begin
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
{ create documents that use embedded TrueType or OpenType fonts }
Info := PDF.GetFontSubsetCacheInfo;
end;