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 produce una copia PDF sanitizzata a revisione unica che rimuove i vettori di contenuto attivo dal catalogo del documento e poi esegue facoltativamente una potatura di raggiungibilità per eliminare gli oggetti orfani dal corpo del file
La pipeline a due stripe rimuove prima le voci del catalogo
(/OpenAction, /AA, /Names,
/AF,
/AcroForm, /Metadata) tramite
StripDictionaryEntries come aggiornamento incrementale,
quindi esegue PruneUnreachablePdfStream per riscrivere il
file come una singola revisione classica pulita
L'aggiornamento di catalogo e trailer usa ricerca xref sparsa, finestre del parser non maggiori di 1 MiB e copia per intervalli di 64 KiB sul percorso xref normale invece di materializzare l'intero PDF salvato in un unico array di byte
Quando la potatura è abilitata, l'area di lavoro intermedia è un
TPdfRandomAccessStore governato da
SaveMemoryLimit e SaveTemporaryDirectory
Il suo picco di memoria e il suo stato di spill sono inclusi in
LastSaveLargestMemoryBuffer e
LastSaveSpillCount
Ogni flag di rimozione è indipendente
TPdfSanitiseOptions.Default abilita il profilo di sicurezza
completo: StripOpenAction,
StripCatalogActions, StripNames,
StripAssociatedFiles, più la potatura
RemoveUnreachable. StripAcroForm
e StripMetadata sono predefiniti a False
perché rimuovono i campi dei moduli e i metadati che i chiamanti
potrebbero voler conservare
L'output è sempre una revisione singola senza cronologia
incrementale quando RemoveUnreachable=True
Options — record TPdfSanitiseOptions; usare Default per il profilo di sicurezza standardReport — riceve il conteggio delle voci rimosse, il conteggio degli oggetti potati, i conteggi dei byte ed eventuali erroriStripNames rimuove l'intero dizionario /Names inclusi /JavaScript, /EmbeddedFiles, /Dests e /AP; si tratta di un comportamento volutamente aggressivo per la sanitizzazioneStripAssociatedFiles rimuove la voce /AF a livello di catalogo ed è predefinito a TrueStripMetadata rimuove sia /Metadata del catalogo (XMP) sia /Info del trailer/AA e /A per singola annotazione non vengono rimosse in questo metodo; viene eliminato solo il contenuto attivo a livello di catalogoTryReadTrailerInfo/AcroForm elimina i campi firma e invalida le firme esistenti
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;