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;
O SaveAsSanitised produz uma cópia PDF sanitizada de revisão única que remove vetores de conteúdo ativo do catálogo do documento e depois executa opcionalmente uma poda de alcançabilidade para eliminar objetos órfãos do corpo do ficheiro
O pipeline de dois estágios primeiro remove entradas do catálogo
(/OpenAction, /AA, /Names,
/AF,
/AcroForm, /Metadata) via
StripDictionaryEntries como atualização incremental,
depois
executa PruneUnreachablePdfStream para reescrever o
ficheiro como
uma única revisão clássica limpa
A atualização do catálogo e do trailer usa pesquisa esparsa de xref, janelas de parser não maiores que 1 MiB e cópia de intervalos de 64 KiB no caminho xref normal em vez de materializar o PDF gravado completo num único array de bytes
Quando a poda está ativa, o espaço de trabalho intermédio é um
TPdfRandomAccessStore governado por
SaveMemoryLimit e SaveTemporaryDirectory.
O seu pico de memória e o estado de transbordo ficam incluídos em
LastSaveLargestMemoryBuffer e
LastSaveSpillCount
Cada flag de remoção é independente.
TPdfSanitiseOptions.Default ativa o perfil de segurança
completo: StripOpenAction,
StripCatalogActions, StripNames,
StripAssociatedFiles, mais
a poda RemoveUnreachable. StripAcroForm
e StripMetadata são False por predefinição
porque removem campos de formulário e metadados que os chamadores
podem querer manter
A saída é sempre uma única revisão sem histórico incremental
quando RemoveUnreachable=True
Options — record TPdfSanitiseOptions; use Default para o perfil de segurança padrãoReport — recebe contagem de entradas removidas, contagem de objetos podados, contagens de bytes e qualquer erroStripNames remove todo o dicionário /Names, incluindo /JavaScript, /EmbeddedFiles, /Dests e /AP; isto é intencionalmente agressivo para a sanitizaçãoStripAssociatedFiles remove a entrada /AF ao nível do catálogo e é True por predefiniçãoStripMetadata remove tanto o /Metadata (XMP) do catálogo como o /Info do trailer/AA e /A por anotação não são removidas neste método; apenas o conteúdo ativo ao nível do catálogo é removidoTryReadTrailerInfo subjacente/AcroForm elimina campos de assinatura e invalida as assinaturas existentes
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;