function SaveAsDeduplicated(Stream: TStream; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsDeduplicated(const FileName: string; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
O PDFium escreve primeiro uma cópia não incremental do documento atual em memória; de seguida, o wrapper efetua uma travessia de alcançabilidade a todo o documento e descarta todos os objetos inalcançáveis exatamente como SaveAsReachable
As fontes, imagens e form XObjects são depois alvo de fingerprinting: cada dicionário candidato, o seu subgrafo alcançável completo e a sua carga bruta de stream recebem hash recursivo, pelo que os duplicados só se fundem quando todo o seu conteúdo é idêntico
Cada cross-reference que apontava para um duplicado fundido é reescrita para o representante sobrevivente, e os números e gerações de objeto mantêm-se estáveis, para que cada cross-reference sobrevivente continue válida
A saída é uma única revisão clássica sem object streams e sem cross-reference stream, e o trailer reconstruído transporta /Root, /Info e /ID
TPdfDedupReport reporta contagens de objetos mantidos e podados, mais contagens por categoria de fontes, imagens e form XObjects fundidos, com os tamanhos em bytes da origem e da saída e uma mensagem de falha estruturadaAllowSignedDocument estiver explicitamente ativado, porque uma reescrita completa invalida os intervalos de bytes das assinaturas existentes
Pdf.SaveAsDeduplicated('deduplicated.pdf', Report);
WriteLn('merged ', Report.MergedImageCount, ' images');