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 erzeugt eine bereinigte PDF-Kopie in einer einzigen Revision, die aktive Inhaltsvektoren aus dem Dokumentkatalog entfernt und danach optional ein Reachability-Ausdünnen ausführt, um verwaiste Objekte aus dem Dateikörper zu beseitigen
Die zweistufige Pipeline entfernt zuerst Katalog-Einträge
(/OpenAction, /AA, /Names,
/AF,
/AcroForm, /Metadata) über
StripDictionaryEntries als inkrementelles Update und
führt anschließend PruneUnreachablePdfStream aus, um die Datei als
eine einzige saubere klassische Revision neu zu schreiben
Das Katalog- und Trailer-Update verwendet spärliche Xref-Suche, Parser- Fenster von höchstens 1 MiB und 64-KiB-Bereichskopien auf dem normalen Xref-Pfad, statt das vollständige gespeicherte PDF in einem Byte-Array zu materialisieren
Wenn das Ausdünnen aktiviert ist, ist der Zwischen-Arbeitsbereich ein
TPdfRandomAccessStore, der von
SaveMemoryLimit und SaveTemporaryDirectory gesteuert wird
Sein Speicherbedarf-Spitzenwert und sein Auslagerungszustand gehen in
LastSaveLargestMemoryBuffer und
LastSaveSpillCount ein
Jedes Strip-Flag ist unabhängig.
TPdfSanitiseOptions.Default aktiviert das vollständige Sicherheits-
profil: StripOpenAction,
StripCatalogActions, StripNames,
StripAssociatedFiles plus
RemoveUnreachable-Ausdünnen. StripAcroForm
und StripMetadata stehen standardmäßig auf False,
weil sie Formularfelder und Metadaten entfernen, die Aufrufer möglicherweise
behalten wollen
Die Ausgabe ist bei RemoveUnreachable=True stets eine einzelne Revision ohne inkrementellen
Verlauf
Options — TPdfSanitiseOptions-Record; verwenden Sie Default für das StandardsicherheitsprofilReport — empfängt die Anzahl entfernter Einträge, die Anzahl gedünnter Objekte, Byte-Zählungen und etwaige FehlerStripNames entfernt das gesamte /Names-Wörterbuch einschließlich /JavaScript, /EmbeddedFiles, /Dests und /AP; das ist für die Bereinigung bewusst aggressivStripAssociatedFiles entfernt den /AF-Eintrag auf Katalogebene und steht standardmäßig auf TrueStripMetadata entfernt sowohl Katalog-/Metadata (XMP) als auch Trailer-/Info/AA- und /A-Aktionen pro Annotation werden in dieser Methode nicht entfernt; es wird nur aktiver Inhalt auf Katalogebene entferntTryReadTrailerInfo-Schutzprüfung abgelehnt/AcroForm Signaturfelder entfernt und vorhandene Signaturen ungültig macht
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;