持久字体子集缓存
持久字体子集缓存避免在后续文档使用相同字体内容和字形集时重复昂贵的 TrueType 或 OpenType 子集化
配置
property FontSubsetCacheFolder: AnsiString;
property FontSubsetCacheMaxBytes: Int64;
function GetFontSubsetCacheInfo: THPDFFontSubsetCacheInfo;
procedure ClearFontSubsetCache;
空 FontSubsetCacheFolder 禁用磁盘缓存而不改变字体输出
FontSubsetCacheMaxBytes 默认为 256 MiB,可以在运行时减小,这会触发立即的最近最少使用逐出
统计
THPDFFontSubsetCacheInfo 包含 HitCount、MissCount、WriteCount、EvictionCount、CorruptCount、RejectedCount、WriteFailureCount、CurrentBytes 和 FileCount
正确性与恢复
- 只有当字体内容、使用的字形、子集模式和缓存模式都匹配时才可能缓存命中
- 紧凑子集条目保留 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;