function SaveAsSanitised(Stream: TStream;
const Options: TPdfSanitiseOptions;
out Report: TPdfSanitiseReport): Boolean; overload;
function SaveAsSanitised(const FileName: string;
const Options: TPdfSanitiseOptions;
out Report: TPdfSanitiseReport): Boolean; overload;
SaveAsSanitised は、ドキュメントカタログからアクティブコンテンツのベクトルを取り除き、その後で到達可能性の刈り込みを任意に実行して孤立オブジェクトをファイル本体から排除する、無害化された単一リビジョンの PDF コピーを生成します
2 段階のパイプラインは、まず StripDictionaryEntries によってカタログエントリ (/OpenAction、/AA、/Names、/AF、/AcroForm、/Metadata) をインクリメンタル更新として剥ぎ取り、次に PruneUnreachablePdfStream を実行してファイルを 1 つのクリーンなクラシックリビジョンとして書き換えます
カタログとトレーラーの更新は、保存済み PDF 全体を 1 つのバイト配列として具体化する代わりに、スパースな xref ルックアップ、最大 1 MiB のパーサーウィンドウ、通常の xref パス上の 64 KiB 範囲コピーを使用します
刈り込みが有効な場合、中間ワークスペースは SaveMemoryLimit と SaveTemporaryDirectory に従う TPdfRandomAccessStore です。そのピークメモリとスピル状態は LastSaveLargestMemoryBuffer と LastSaveSpillCount に含まれます
すべてのストリップフラグは独立しています。TPdfSanitiseOptions.Default は完全なセキュリティプロファイル (StripOpenAction、StripCatalogActions、StripNames、StripAssociatedFiles、さらに RemoveUnreachable 刈り込み) を有効にします。StripAcroForm と StripMetadata は、呼び出し側が保持したいフォームフィールドとメタデータを除去するため、既定では False です
RemoveUnreachable=True の場合、出力は常にインクリメンタル履歴のない単一リビジョンになります
Options — TPdfSanitiseOptions レコード。標準のセキュリティプロファイルには Default を使用しますReport — 剥ぎ取られたエントリ数、刈り込まれたオブジェクト数、バイト数、発生したエラーを受け取りますStripNames は /JavaScript、/EmbeddedFiles、/Dests、/AP を含む /Names 辞書全体を除去します。無害化のために意図的に攻撃的な動作ですStripAssociatedFiles はカタログレベルの /AF エントリを除去し、既定値は True ですStripMetadata はカタログ /Metadata (XMP) とトレーラー /Info の両方を除去します/AA と /A アクションはこのメソッドでは剥ぎ取られません。除去されるのはカタログレベルのアクティブコンテンツのみですTryReadTrailerInfo ガードによって拒否されます/AcroForm の剥ぎ取りは署名フィールドを除去し、既存の署名を無効化します
var
Options: TPdfSanitiseOptions;
Report: TPdfSanitiseReport;
begin
Pdf1.FileName := 'C:\Untrusted.pdf';
Pdf1.Active := True;
Options := TPdfSanitiseOptions.Default;
Pdf1.SaveAsSanitised('C:\Sanitised.pdf', Options, Report);
end;