/Info 辞書から到達可能な間接オブジェクトのみを保持する単一のクリーンなリビジョンとしてドキュメントを書き換えますfunction SaveAsReachable(Stream: TStream; out Report: TPdfPruneReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsReachable(const FileName: string; out Report: TPdfPruneReport; AllowSignedDocument: Boolean = False): Boolean;
PDFium はまず現在のメモリ内ドキュメントの非増分コピーを書くため、書き換えは正規バイトから始まります
オブジェクトグラフが解析され、カタログからのドキュメント全体の到達可能性走査がすべての生存間接オブジェクトを収集します。ページツリー、ページリソース、フォント、画像、Form XObject、AcroForm、構造ツリー、アウトライン、名前ツリー、任意コンテンツ、メタデータ、出力インテント、関連ファイルを含みます
増分更新、ページマージ、修復保存によって到達不能になったオブジェクトは破棄され、出力はオブジェクトストリームもクロスリファレンスストリームもない単一のクラシックリビジョンです
オブジェクト番号と世代は保持されるため、生存クロスリファレンスは番号を振り直さずに有効なままです。到達不能オブジェクトは再構築されたクラシッククロスリファレンステーブルの空きエントリになります
再構築されたトレーラーは、参照されたオブジェクトが一掃を生き残った場合のみ /Root、/Info、/ID を引き継ぎます
TPdfPruneReport は保持・剪定された間接オブジェクト数、ソースと出力のバイトサイズ、構造化された失敗メッセージを報告しますAllowSignedDocument が明示的に有効でない限り拒否されます。完全書き換えは既存の署名バイト範囲を無効化するためです
Pdf.SaveAsReachable('pruned.pdf', Report);
WriteLn('Kept ', Report.KeptObjectCount, ' pruned ', Report.PrunedObjectCount);