function SaveAsDeduplicated(Stream: TStream; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsDeduplicated(const FileName: string; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
PDFium이 현재 메모리 상의 문서를 비증분 복사본으로 먼저 기록한 뒤, 래퍼가 문서 전체 도달성 조사를 수행하여 SaveAsReachable과 정확히 같은 방식으로 도달 불가능한 모든 객체를 버립니다
그다음 폰트, 이미지, 폼 XObject를 지문화합니다. 각 후보 사전과 그 도달 가능한 서브그래프 전체, 원시 스트림 페이로드를 재귀적으로 해시하므로 중복은 내용 전체가 동일할 때만 병합됩니다
병합으로 사라진 중복을 가리키던 모든 교차 참조는 살아남은 대표 객체를 가리키도록 다시 쓰이고, 객체 번호와 세대는 안정적으로 유지되므로 살아남은 모든 교차 참조가 계속 유효합니다
출력은 객체 스트림과 교차 참조 스트림이 없는 단일 클래식 리비전이며, 재구성된 트레일러는 /Root, /Info, /ID를 그대로 전달합니다
TPdfDedupReport는 유지되고 제거된 객체 수와 범주별로 병합된 폰트, 이미지, 폼 XObject 개수에 더해 원본과 출력 바이트 크기, 구조화된 실패 메시지를 보고합니다AllowSignedDocument를 명시적으로 활성화하지 않는 한 거부됩니다. 전체 다시 쓰기는 기존 서명 바이트 범위를 무효화하기 때문입니다
Pdf.SaveAsDeduplicated('deduplicated.pdf', Report);
WriteLn('merged ', Report.MergedImageCount, ' images');