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는 문서 카탈로그에서 활성 콘텐츠 벡터를 제거하고 그다음 선택적으로 도달 가능성 가지치기를 실행해 파일 본문에서 고아 객체를 없애는 소독된 단일 리비전 PDF 복사본을 만듭니다
2단계 파이프라인은 먼저 StripDictionaryEntries로 카탈로그 항목(/OpenAction, /AA, /Names, /AF, /AcroForm, /Metadata)을 증분 갱신으로 제거하고, 이어서 PruneUnreachablePdfStream으로 파일을 클린 클래식 리비전 하나로 재작성합니다
카탈로그와 트레일러 갱신은 저장된 PDF 전체를 하나의 바이트 배열로 만드는 대신 일반 xref 경로에서 희소 xref 조회, 1 MiB 이하 파서 창, 64 KiB 범위 복사를 사용합니다
가지치기가 활성화되면 중간 작업 공간은 SaveMemoryLimit과 SaveTemporaryDirectory의 관리를 받는 TPdfRandomAccessStore이며 그 피크 메모리와 넘침 상태는 LastSaveLargestMemoryBuffer와 LastSaveSpillCount에 포함됩니다
제거 플래그는 서로 독립입니다. TPdfSanitiseOptions.Default는 StripOpenAction, StripCatalogActions, StripNames, StripAssociatedFiles와 RemoveUnreachable 가지치기로 완전한 보안 프로파일을 켭니다. StripAcroForm과 StripMetadata는 호출자가 유지하고 싶어 할 수 있는 폼 필드와 메타데이터를 제거하므로 기본값이 False입니다
RemoveUnreachable=True일 때 출력은 항상 증분 기록이 없는 단일 리비전입니다
Options — TPdfSanitiseOptions 레코드이며 표준 보안 프로파일에는 Default를 사용합니다Report — 제거된 항목 개수, 가지치기된 객체 개수, 바이트 개수, 발생한 오류를 받습니다StripNames는 /JavaScript, /EmbeddedFiles, /Dests, /AP를 포함한 /Names 딕셔너리 전체를 제거하며 소독 목적의 의도적인 공격적 동작입니다StripAssociatedFiles는 카탈로그 수준 /AF 항목을 제거하며 기본값은 True입니다StripMetadata는 카탈로그 /Metadata(XMP)와 트레일러 /Info를 모두 제거합니다/AA와 /A 액션은 이 메서드에서 제거하지 않고 카탈로그 수준 활성 콘텐츠만 제거합니다TryReadTrailerInfo 가드가 거부합니다/AcroForm 제거가 서명 필드를 없애고 기존 서명을 무효화하므로 주의해서 소독해야 합니다
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;