DeduplicateResources

ドキュメント操作、最適化

説明

読み込んだ文書全体でバイト単位で同一の間接リソースストリームを検索し、すべての参照を決定論的な正規ストリームへリダイレクトし、必要に応じて重複する間接オブジェクトを削除します

等価と見なすには、ストリーム辞書全体の順序に依存しないシグネチャと、エンコード済みストリームペイロードの完全一致がともに必要です。そのため、画像マスク、色空間、デコード配列、オプショナルコンテンツの関連付け、構造識別子、メタデータ、フィルター、および意味を持つすべての辞書エントリが判定対象に残ります

構文

Delphi

Function TPDFlib.DeduplicateResources(
  Options: Integer= PDF_RESOURCE_DEDUP_DEFAULT): Integer; Overload;
Function TPDFlib.DeduplicateResources(Options: Integer;
  Out Stats: TPDFlibResourceDedupStats): Integer; Overload;

パラメータ

Optionsリソース重複排除オプション定数のビット単位の組み合わせ
Statsスキャン、ハッシュ、比較、参照、ペイロード、カテゴリー、孤立オブジェクトの各カウンターを受け取ります

リソース形式オプション

PDF_RESOURCE_DEDUP_IMAGES画像 XObject、明示的な画像マスク、ソフトマスク画像、代替画像、およびサムネイルを含みます
PDF_RESOURCE_DEDUP_FORMS再利用可能なページグラフィックス、注釈の外観、透明グループなどの Form XObject を含みます
PDF_RESOURCE_DEDUP_PATTERNSストリームベースのタイリングパターンを含みます
PDF_RESOURCE_DEDUP_SHADINGSストリームベースのメッシュシェーディングを含みます
PDF_RESOURCE_DEDUP_FUNCTIONSサンプル関数ストリームを含みます
PDF_RESOURCE_DEDUP_ICC_PROFILESICCBased 色空間または出力インテントから参照される ICC プロファイルストリームを含める
PDF_RESOURCE_DEDUP_FONT_PROGRAMSFontFile、FontFile2、または FontFile3 を介して参照されるストリームを含みます
PDF_RESOURCE_DEDUP_CMAPSCMap および ToUnicode ストリームを含む
PDF_RESOURCE_DEDUP_TYPE3_CHARPROCSType 3 グリフプロシージャストリームを含めます
PDF_RESOURCE_DEDUP_EMBEDDED_FILES埋め込みファイルストリームを含みます
PDF_RESOURCE_DEDUP_METADATAメタデータストリームを含みます
PDF_RESOURCE_DEDUP_POSTSCRIPTPostScript XObject を含みます
PDF_RESOURCE_DEDUP_ALL_TYPES12 個すべてのリソース形式フラグを組み合わせます

操作オプション

PDF_RESOURCE_DEDUP_DRY_RUNオブジェクトグラフを変更せず、オブジェクトも回収せずに、重複ストリームと参照をレポートします
PDF_RESOURCE_DEDUP_GARBAGE_COLLECT参照のリダイレクト後にマークアンドスイープ収集を実行します
PDF_RESOURCE_DEDUP_DEFAULTすべてのリソースタイプをガベージコレクションと組み合わせます

戻り値

Positive value統合された重複間接ストリーム、またはドライランで報告された重複間接ストリームの数
0対象となる重複ストリームが見つからなかったか、文書が読み込まれていません

備考

各完全等価グループ内で最小のオブジェクト番号と世代が正規ストリームとなるため、繰り返し実行しても決定論的になります

辞書キーの順序は等価性に影響しませんが、間接参照の同一性を含め、すべての意味的なキーと値は影響します。数値のトップレベル Length エントリは解決後の値で比較されるため、等価な直接および間接の長さ形式でリソースを共有できます

デコード済みコンテンツが等しくてもフィルターまたはエンコード済みバイトが異なるリソースは別々に維持されます。辞書が異なるネストオブジェクトを参照するリソースも同様です

すべての候補ペイロードは SHA-256 で一度だけハッシュされ、バイト単位の確認はハッシュと辞書シグネチャが一致するバケット内だけで実行されます

ISO 32000 ではストリームが間接オブジェクトであることを要求し、共有リソースは間接参照で表現されるため、このメソッドは間接ストリームを操作します

文書編集後かつ完全保存前に既定値を使用し、重複オブジェクトのバイト列を直ちに回収します

増分保存で古いリビジョンを物理的にそのまま維持する必要がある場合は、PDF_RESOURCE_DEDUP_GARBAGE_COLLECT を省略します。リダイレクトされた参照は新しいリビジョンの重複を引き続き減らしますが、以前のリビジョンからバイトを削除できません

例

var
  Stats: TPDFlibResourceDedupStats;
  Merged: Integer;
begin
  Merged:= PDF.DeduplicateResources(
    PDF_RESOURCE_DEDUP_DEFAULT, Stats);
  PDF.SaveToFile('optimised.pdf');
end;

関連項目

TPDFlibResourceDedupStats、PurgeUnusedResources、GarbageCollectObjects