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 produz uma cópia PDF sanitizada de revisão única que remove os 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 arquivo
O pipeline de dois estágios primeiro remove entradas do catálogo
(/OpenAction, /AA, /Names,
/AF,
/AcroForm, /Metadata) por meio de
StripDictionaryEntries como uma atualização incremental e, em seguida,
executa PruneUnreachablePdfStream para regravar o arquivo como
uma única revisão clássica limpa
A atualização de catálogo e trailer usa busca esparsa de xref, janelas de parser de no máximo 1 MiB e cópia de intervalos de 64 KiB no caminho normal de xref, em vez de materializar o PDF salvo completo em um único array de bytes
Quando a poda está habilitada, o espaço de trabalho intermediário é um
TPdfRandomAccessStore governado por
SaveMemoryLimit e SaveTemporaryDirectory
Seu pico de memória e estado de despejo são incluídos em
LastSaveLargestMemoryBuffer e
LastSaveSpillCount
Cada flag de remoção é independente
TPdfSanitiseOptions.Default habilita o perfil de segurança
completo: StripOpenAction,
StripCatalogActions, StripNames,
StripAssociatedFiles, além da poda
RemoveUnreachable. StripAcroForm
e StripMetadata têm padrão False
porque removem campos de formulário e metadados que os chamadores podem
querer manter
A saída é sempre uma revisão única sem histórico
incremental quando RemoveUnreachable=True
Options — record TPdfSanitiseOptions; use Default para o perfil de segurança padrãoReport — recebe a contagem de entradas removidas, a contagem de objetos podados, as contagens de bytes e qualquer erroStripNames remove o dicionário /Names inteiro, incluindo /JavaScript, /EmbeddedFiles, /Dests e /AP; isso é intencionalmente agressivo para a sanitizaçãoStripAssociatedFiles remove a entrada /AF de nível de catálogo e tem padrão TrueStripMetadata remove tanto o /Metadata (XMP) do catálogo quanto o /Info do trailer/AA e /A por anotação não são removidas neste método; apenas o conteúdo ativo de nível de catálogo é eliminadoTryReadTrailerInfo subjacente/AcroForm elimina campos de assinatura e invalida 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;