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 produit une copie PDF assainie à révision unique qui retire les vecteurs de contenu actif du catalogue du document puis exécute facultativement un élagage d’accessibilité pour éliminer les objets orphelins du corps du fichier
Le pipeline en deux étapes retire d’abord les entrées du catalogue
(/OpenAction, /AA, /Names,
/AF,
/AcroForm, /Metadata) via
StripDictionaryEntries sous forme de mise à jour incrémentale, puis
exécute PruneUnreachablePdfStream pour réécrire le fichier comme
une seule révision classique propre
La mise à jour du catalogue et du trailer utilise une recherche xref creuse, des fenêtres d’analyse de 1 Mio au plus et une copie de plages de 64 Kio sur le chemin xref normal au lieu de matérialiser le PDF enregistré complet dans un seul tableau d’octets
Lorsque l’élagage est activé, l’espace de travail intermédiaire est un
TPdfRandomAccessStore régi par
SaveMemoryLimit et SaveTemporaryDirectory
Sa mémoire au pic et son état de débordement figurent dans
LastSaveLargestMemoryBuffer et
LastSaveSpillCount
Chaque indicateur de retrait est indépendant
TPdfSanitiseOptions.Default active le profil de sécurité
complet : StripOpenAction,
StripCatalogActions, StripNames,
StripAssociatedFiles, plus
l’élagage RemoveUnreachable. StripAcroForm
et StripMetadata valent False par défaut
car ils retirent des champs de formulaire et des métadonnées que les
appelants peuvent vouloir conserver
La sortie est toujours une révision unique sans historique
incrémental lorsque RemoveUnreachable=True
Options — enregistrement TPdfSanitiseOptions ; utilisez Default pour le profil de sécurité standardReport — reçoit le nombre d’entrées retirées, le nombre d’objets élagués, les compteurs d’octets et toute erreurStripNames supprime tout le dictionnaire /Names, y compris /JavaScript, /EmbeddedFiles, /Dests et /AP ; c’est délibérément agressif pour l’assainissementStripAssociatedFiles supprime l’entrée /AF au niveau du catalogue et vaut True par défautStripMetadata supprime à la fois le /Metadata du catalogue (XMP) et le /Info du trailer/AA et /A par annotation ne sont pas retirées par cette méthode ; seul le contenu actif au niveau du catalogue est suppriméTryReadTrailerInfo/AcroForm supprime les champs de signature et invalide les signatures existantes
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;