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 tworzy odkażoną kopię PDF w pojedynczej rewizji, która usuwa wektory aktywnej treści z katalogu dokumentu, a następnie opcjonalnie uruchamia przycinanie osiągalności, aby wyeliminować osierocone obiekty z korpusu pliku
Dwustopniowy potok najpierw zdejmuje wpisy katalogu
(/OpenAction, /AA, /Names,
/AF,
/AcroForm, /Metadata) przez
StripDictionaryEntries jako aktualizację przyrostową, a potem
uruchamia PruneUnreachablePdfStream, aby przepisać plik jako
jedną czystą klasyczną rewizję
Aktualizacja katalogu i traileru używa rzadkiego wyszukiwania xref, okien parsera nie większych niż 1 MiB i kopiowania zakresów po 64 KiB na normalnej ścieżce xref, zamiast materializować kompletny zapisany PDF w jednej tablicy bajtów
Gdy przycinanie jest włączone, obszarem roboczym pośrednim jest
TPdfRandomAccessStore rządzony przez
SaveMemoryLimit i SaveTemporaryDirectory
Jego pamięć szczytowa i stan przelewania są wliczane do
LastSaveLargestMemoryBuffer i
LastSaveSpillCount
Każda flaga zdejmowania jest niezależna
TPdfSanitiseOptions.Default włącza pełny profil
bezpieczeństwa: StripOpenAction,
StripCatalogActions, StripNames,
StripAssociatedFiles oraz przycinanie
RemoveUnreachable. StripAcroForm
i StripMetadata domyślnie mają False,
ponieważ usuwają pola formularzy i metadane, które wywołujący może chcieć
zachować
Wyjście jest zawsze pojedynczą rewizją bez historii przyrostowej,
gdy RemoveUnreachable=True
Options — rekord TPdfSanitiseOptions; użyj Default dla standardowego profilu bezpieczeństwaReport — otrzymuje liczbę zdjętych wpisów, liczbę przyciętych obiektów, liczniki bajtów i ewentualny błądStripNames usuwa cały słownik /Names, łącznie z /JavaScript, /EmbeddedFiles, /Dests i /AP; to celowo agresywne działanie przy odkażaniuStripAssociatedFiles usuwa katalogowy wpis /AF i domyślnie ma wartość TrueStripMetadata usuwa zarówno katalogowe /Metadata (XMP), jak i trailerowy /Info/AA i /A poszczególnych adnotacji nie są zdejmowane w tej metodzie; usuwana jest tylko aktywna treść na poziomie kataloguTryReadTrailerInfo/AcroForm usuwa pola podpisów i unieważnia istniejące 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;