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 vytvoří sanitizovanou jednorevizní kopii PDF, která z dokumentového katalogu odstraní vektory aktivního obsahu a poté volitelně spustí prořez dosažitelnosti, jež z těla souboru vyřadí osiřelé objekty
Dvoustupňová pipeline nejprve zbaví katalogové položky
(/OpenAction, /AA, /Names,
/AF,
/AcroForm, /Metadata) pomocí
StripDictionaryEntries jako přírůstkové aktualizace a poté
spustí PruneUnreachablePdfStream, který přepíše soubor do
jedné čisté klasické revize
Aktualizace katalogu a traileru používá řídké vyhledávání v xref, parserová okna největší 1 MiB a kopírování rozsahů po 64 KiB na běžné xref cestě místo materializace kompletního ukládaného PDF v jednom bajtovém poli
Když je prořezávání zapnuté, mezilehlým pracovním prostorem je
TPdfRandomAccessStore řízený pomocí
SaveMemoryLimit a SaveTemporaryDirectory
Jeho špičková paměť a stav rozlití se zahrnou do
LastSaveLargestMemoryBuffer a
LastSaveSpillCount
Každý příznak odstraňování je nezávislý
TPdfSanitiseOptions.Default zapíná plný bezpečnostní
profil: StripOpenAction,
StripCatalogActions, StripNames,
StripAssociatedFiles plus prořez
RemoveUnreachable StripAcroForm
a StripMetadata mají výchozí False
proto, že odstraňují formulářová pole a metadata, kterou mohou volající
chtít ponechat
Výstup je vždy jediná revize bez přírůstkové
historie, když je RemoveUnreachable=True
Options — záznam TPdfSanitiseOptions; pro standardní bezpečnostní profil použijte DefaultReport — přijme počet odstraněných položek, počet prořezaných objektů, počty bajtů a případnou chybuStripNames odstraní celý slovník /Names včetně /JavaScript, /EmbeddedFiles, /Dests a /AP; u sanitizace je to záměrně razantníStripAssociatedFiles odstraní katalogovou položku /AF a má výchozí TrueStripMetadata odstraní katalogové /Metadata (XMP) i trailerové /Info/AA a /A jednotlivých anotací se v této metodě neodstraňují; odstraňuje se pouze aktivní obsah na úrovni kataloguTryReadTrailerInfo/AcroForm smaže podpisová pole a zneplatní stávající podpisy
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;