THotPDF.SubsetLoadedFonts Method
改寫受支援的內嵌 TrueType、OpenType CFF、原始 CFF 與 Type 1 字型程式,只保留從已載入文件內容可達的字形
宣告
function SubsetLoadedFonts(
const Options: THPDFLoadedFontSubsetOptions;
out AInfo: THPDFLoadedFontSubsetInfo): Integer; overload;
function SubsetLoadedFonts(
out AInfo: THPDFLoadedFontSubsetInfo): Integer; overload;
可達範圍
頁面內容一律會掃描,包括顯示文字運算子與資源本機的字型選擇
IncludeFormXObjects 遞迴納入被呼叫的 Form XObject,處理繼承資源、循環偵測與有界巢狀深度
IncludeAnnotationAppearances 納入一般、滑入與按下的外觀以及狀態字典;啟用時也會追蹤這些外觀使用的 Form XObject
每個字元碼先依宣告的編碼,再經任何 Type0 CMap 與 CIDToGIDMap,才對應到穩定的內嵌字形 ID;既有的 CID 對映與 ToUnicode 資料不會重新編號
TrueType 合成字形保留遞迴的元件閉包,COLR v0 圖層與 COLR v1 字形繪製相依也保留每個被引用的外框
Type 1 簡單字型遵循 Standard、WinAnsi、MacRoman 或 MacExpert 編碼加上 Differences,然後在 PFB、PDF 分段二進位或十六進位 PFA 資料中改寫未使用的 CharStrings,不改變內嵌串流布局
選項
| 欄位 | 預設 | 意義 |
|---|---|---|
MinimumSavingsBytes | 1 | 採用候選結果前,編碼串流至少要縮減的位元組數 |
EnforceSignaturePermissions | True | 文件包含簽章欄位時,拒絕所有改寫 |
IncludeFormXObjects | True | 追蹤被呼叫的巢狀 Form XObject |
IncludeAnnotationAppearances | True | 追蹤註解外觀串流與狀態 |
結果與安全須知
傳回值是被改寫的內嵌字型程式數量,AInfo 則回報掃描覆蓋、對映或解碼失敗、使用到的字形、位元組節省與簽章後果
當任何可達字元碼無法對映、格式不受支援、子集化失敗,或編碼後的候選未達節省門檻時,字型程式會逐位元組保持不變
Type 1 改寫遇到多個二進位 PFB 段、無法解析的明確簡單字型編碼、缺少要求的字形名稱或不支援的 CharString 布局時,一律以失敗收場;未知的 COLR 版本與沒有稀疏外框表的 sfnt 程式同樣保持不變
所有候選都先分析再修改;預設簽章政策會傳回零並設定 RefusedBySignaturePolicy;停用該政策即可允許改寫,且簽署過的文件只要被改動就會設定 SignaturesInvalidated
範例
var
Info: THPDFLoadedFontSubsetInfo;
begin
PDF.LoadFromFile('input.pdf');
if PDF.SubsetLoadedFonts(Info) > 0 then
PDF.SaveToFile('subset.pdf');
end;