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_PROFILES | ICCBased 色空間または出力インテントから参照される ICC プロファイルストリームを含める |
| PDF_RESOURCE_DEDUP_FONT_PROGRAMS | FontFile、FontFile2、または FontFile3 を介して参照されるストリームを含みます |
| PDF_RESOURCE_DEDUP_CMAPS | CMap および ToUnicode ストリームを含む |
| PDF_RESOURCE_DEDUP_TYPE3_CHARPROCS | Type 3 グリフプロシージャストリームを含めます |
| PDF_RESOURCE_DEDUP_EMBEDDED_FILES | 埋め込みファイルストリームを含みます |
| PDF_RESOURCE_DEDUP_METADATA | メタデータストリームを含みます |
| PDF_RESOURCE_DEDUP_POSTSCRIPT | PostScript XObject を含みます |
| PDF_RESOURCE_DEDUP_ALL_TYPES | 12 個すべてのリソース形式フラグを組み合わせます |
操作オプション
| 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