function SaveAsDeduplicated(Stream: TStream; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsDeduplicated(const FileName: string; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
PDFium はまず現在のメモリ内ドキュメントの非増分コピーを書き、次にラッパーがドキュメント全体の到達可能性走査を実行し、SaveAsReachable とまったく同じようにすべての到達不能オブジェクトを破棄します
フォント、画像、Form XObject はフィンガープリントされます。各候補辞書、その完全な到達可能サブグラフ、生のストリームペイロードが再帰的にハッシュされるため、重複は内容全体が同一の場合のみマージされます
マージで消えた重複を指すすべてのクロスリファレンスは生存代表に書き換えられ、オブジェクト番号と世代は安定したままなので、生存クロスリファレンスはすべて有効なままです
出力はオブジェクトストリームもクロスリファレンスストリームもない単一のクラシックリビジョンで、再構築されたトレーラーは /Root、/Info、/ID を引き継ぎます
TPdfDedupReport は保持・剪定されたオブジェクト数と、カテゴリ別のマージ済みフォント・画像・Form XObject 数を、ソースと出力のバイトサイズ、構造化された失敗メッセージと共に報告しますAllowSignedDocument が明示的に有効でない限り拒否されます。完全書き換えは既存の署名バイト範囲を無効化するためです
Pdf.SaveAsDeduplicated('deduplicated.pdf', Report);
WriteLn('merged ', Report.MergedImageCount, ' images');