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,不改變內嵌串流布局

選項

欄位預設意義
MinimumSavingsBytes1採用候選結果前,編碼串流至少要縮減的位元組數
EnforceSignaturePermissionsTrue文件包含簽章欄位時,拒絕所有改寫
IncludeFormXObjectsTrue追蹤被呼叫的巢狀 Form XObject
IncludeAnnotationAppearancesTrue追蹤註解外觀串流與狀態

結果與安全須知

傳回值是被改寫的內嵌字型程式數量,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;

資源與影像最佳化