function SaveAsRedacted(Stream: TStream;
const Options: TPdfRedactionOptions;
out Report: TPdfRedactionReport): Boolean; overload;
function SaveAsRedacted(const FileName: string;
const Options: TPdfRedactionOptions;
out Report: TPdfRedactionReport): Boolean; overload;
SaveAsRedacted captura o documento atual em um snapshot isolado de acesso aleatório, abre esse snapshot como um TPdf separado e processa todos os retângulos de anotação /Redact
As opções padrão habilitam tanto PreservePartialObjects quanto PreserveComplexObjects para reter geometria segura suportada; este perfil delimitado reconstrói texto a partir de fragmentos de caracteres retidos, recorta caminhos preenchidos sólidos e limpa pixels que cruzam em imagens afins
Quando existe qualquer anotação de redação, o perfil detalhado expande cada instância de Form XObject em todas as páginas, incluindo páginas não redigidas, antes de aplicar as redações; as transformações de instância são compostas e os streams Form compartilhados originais podem então ser removidos pela poda de recursos
Defina PreservePartialObjects := False para remover objetos que cruzam por inteiro, ou mantenha-o habilitado e defina PreserveComplexObjects := False para usar o perfil de fragmentação mais simples de texto, retângulo alinhado aos eixos e imagem alinhada aos eixos; as checagens de segurança da origem se aplicam aos três perfis
O método remove todas as anotações de redação, remove opcionalmente outras anotações que cruzam os retângulos, remove anotações de anexo de arquivo nas páginas redigidas, exclui anexos incorporados nativos e executa a regravação sanitizada com o /AF do catálogo, conteúdo ativo, formulários, metadados e objetos inalcançáveis removidos
Depois que o conteúdo da página é regenerado, uma poda precisa de recursos varre escopos de recursos de página, Form XObject, pattern, aparência, herdados e aninhados, e remove apenas nomes não usados antes que os objetos inalcançáveis sejam descartados
A saída, portanto, tem uma revisão limpa única e não preserva revisões anteriores recuperáveis, enquanto o documento de origem carregado permanece inalterado
FillColor — cor de substituição opaca, padrão clBlackRemoveIntersectingAnnotations — remove anotações que não são de redação cujos retângulos se sobrepõem a um retângulo de redação, padrão TrueMaxPageObjects — número máximo de objetos de página de nível superior varridos nas páginas redigidas, padrão 1000000PreservePartialObjects — retém fragmentos suportados de texto, caminho e imagem que não cruzam os retângulos, padrão TrueMaxSplitObjects — número máximo de fragmentos seguros criados durante a operação, padrão 1000000PreserveComplexObjects — habilita expansão delimitada de Form, recorte de caminhos preenchidos sólidos e limpeza de pixels de imagens afins quando PreservePartialObjects também está habilitado, padrão TrueMaxFormDepth — profundidade máxima de expansão aninhada de Form, padrão 32, intervalo aceito 1..64MaxPathPoints — limita segmentos em um caminho afetado e os pontos de caminho gerados cumulativos, padrão 262144, intervalo aceito 1..1000000MaxImagePixels — pixels decodificados cumulativos processados para substituições detalhadas de imagem, padrão 16777216, intervalo aceito 1..67108864MaxGeometryOperations — trabalho cumulativo de geometria detalhada, incluindo varreduras de anotações e de texto, subdivisão e recorte de caminhos e testes de interseção de pixels, padrão 67108864, intervalo aceito 1..1000000000CurveTolerancePdfPoints — tolerância de achatamento cúbico no espaço da página, padrão 0.01, intervalo finito aceito 0.0001..0.1; os cortes de caminho se expandem por esta tolerância mais 0.001 pontos PDF, de modo que uma margem segura adicional estreita pode ser removidaAs opções de Form, caminho, imagem, geometria e tolerância acima são validadas e usadas pelo perfil detalhado; elas não elevam os orçamentos independentes de inspeção da origem
TPdfRedactionReport retorna RedactionCount, RedactedPageCount, ScannedObjectCount, RemovedObjectCount, RemovedAnnotationCount, RemovedAttachmentCount, OverlayCount, SplitTextObjectCount, SplitPathObjectCount, SplitImageObjectCount, PreservedFragmentCount, as contagens de bytes, o SanitiseReport e o ResourcePruneReport aninhados, Succeeded e ErrorMessage
O trabalho detalhado adiciona ExpandedFormCount, ScannedFormChildCount, FlattenedCurveCount, GeneratedPathPointCount, MaskedImageCount, ScannedImagePixelCount, MaskedImagePixelCount, PixelIntersectionTestCount e GeometryOperationCount; CurveTolerancePdfPoints registra a tolerância configurada após um processamento bem-sucedido
ScannedFormChildCount conta objetos nativos visitados durante a expansão, incluindo instâncias raiz de Form, e GeneratedPathPointCount inclui pontos intermediários de recorte, bem como pontos de curva achatados
MaskedImagePixelCount conta pixels cujas amostras completas de cor e alpha foram limpas, enquanto PreservedFragmentCount conta objetos de substituição em vez de pixels retidos individuais ou contornos de polígono; contadores de processamento em caso de falha podem ser parciais e não implicam uma saída confirmada
0.001 pontos PDF; tanto RGB quanto alpha são zerados, e então uma sobreposição opaca de FillColor cobre o retângulo de redação/ActualText ou /Alt, XFA e semânticas de camada de conteúdo opcional, incluindo /OCProperties, /OCG e /OCMD; este método não reconstrói a estrutura lógica nem preserva essas semânticas ocultasTr desconhecidos e pintura com pattern ou espaço de cor especial scn/SCN; streams de conteúdo inspecionados suportados são não filtrados ou usam um único filtro nomeado /FlateDecode256 MiB, corpos individuais de objetos ativos a 64 MiB, corpos ativos totais a 256 MiB, object streams decodificados a 64 MiB cada e 256 MiB no total, e slots de objeto a 1000000; a decodificação de conteúdo inspecionado tem limites adicionais de 32 MiB por stream e 64 MiB no total/AF do catálogo, a árvore /Names, os anexos incorporados nativos e as anotações de anexo de arquivo nas páginas redigidas são removidos; entradas arbitrárias de arquivos associados aninhadas em dicionários de estrutura não relacionados estão fora da garantia explícita deste método/Redact ainda produz o perfil de segurança sanitizado de revisão única
var
Options: TPdfRedactionOptions;
Report: TPdfRedactionReport;
begin
Options := TPdfRedactionOptions.Default;
Options.FillColor := clBlack;
if not Pdf1.SaveAsRedacted('C:\redacted.pdf', Options, Report) then
raise Exception.Create(Report.ErrorMessage);
end;