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 を、埋め込みストリームのレイアウトを変えずに書き直します
オプション
| フィールド | デフォルト | 意味 |
|---|---|---|
MinimumSavingsBytes | 1 | 候補を採用する前に必要なエンコード済みストリームの最小削減量 |
EnforceSignaturePermissions | True | ドキュメントに署名フィールドが含まれる場合、すべての書き直しを拒否する |
IncludeFormXObjects | True | 呼び出される入れ子の Form XObject をたどる |
IncludeAnnotationAppearances | True | 注釈 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;