THotPDF.SubsetLoadedFonts メソッド

対応済みの埋め込み TrueType、OpenType CFF、raw CFF、Type 1 プログラムを書き直し、読み込みドキュメントのコンテンツから到達できる glyph だけを保持させます

宣言

function SubsetLoadedFonts(
    const Options: THPDFLoadedFontSubsetOptions;
    out AInfo: THPDFLoadedFontSubsetInfo): Integer; overload;
function SubsetLoadedFonts(
    out AInfo: THPDFLoadedFontSubsetInfo): Integer; overload;

到達可能性

ページコンテンツは常に走査されます。text-showing オペレータとリソースローカルのフォント選択が対象です

IncludeFormXObjects は、呼び出される Form XObject を継承リソース・循環検出・上限付き入れ子深さ付きで再帰的に含めます

IncludeAnnotationAppearances は、normal・rollover・down の appearance と state ディクショナリを含め、有効時はそれらの appearance が使う Form XObject もたどります

すべての文字コードは、宣言された encoding、次いで任意の Type0 CMap と CIDToGIDMap をたどってから、安定した埋め込み glyph ID に到達します。既存の CID マップと ToUnicode データは再番号付けされません

TrueType の複合 glyph は再帰的なコンポーネント閉包を保持し、COLR v0 レイヤーと COLR v1 の glyph 描画依存は参照されるすべてのアウトラインを保持します

Type 1 の simple フォントは Standard、WinAnsi、MacRoman、MacExpert のいずれかの encoding に Differences を加えてたどり、PFB、PDF 分割バイナリ、hex の PFA データ内の未使用 CharStrings を、埋め込みストリームのレイアウトを変えずに書き直します

オプション

フィールドデフォルト意味
MinimumSavingsBytes1候補を採用する前に必要なエンコード済みストリームの最小削減量
EnforceSignaturePermissionsTrueドキュメントに署名フィールドが含まれる場合、すべての書き直しを拒否する
IncludeFormXObjectsTrue呼び出される入れ子の Form XObject をたどる
IncludeAnnotationAppearancesTrue注釈 appearance ストリームと状態をたどる

結果と安全性

戻り値は書き直された埋め込みフォントプログラムの数で、AInfo は走査カバー範囲、マッピングまたはデコードの失敗、使用された glyph、削減バイト数、署名への影響を報告します

到達可能なコードがマップできない、フォーマットが対応外、サブセット化に失敗、エンコード済み候補が削減しきい値に届かない、のいずれかの場合、フォントプログラムはバイトレベルで変更されません

Type 1 の書き直しは、複数のバイナリ PFB セグメント、パースできない明示的な simple-font encoding、要求された glyph 名の欠落、対応外の CharString レイアウトに対してフェイルクローズします。未知の COLR バージョンと sparse outline テーブルを持たない sfnt プログラムも変更されません

すべての候補は変更前に分析され、デフォルトの署名ポリシーは RefusedBySignaturePolicy を設定して 0 を返します。ポリシーを無効にすると書き直しが許可され、署名付きドキュメントが変更されたときは SignaturesInvalidated が設定されます

例

var
  Info: THPDFLoadedFontSubsetInfo;
begin
  PDF.LoadFromFile('input.pdf');
  if PDF.SubsetLoadedFonts(Info) > 0 then
    PDF.SaveToFile('subset.pdf');
end;

Resource and Image Optimisation