function SaveAsDeduplicated(Stream: TStream; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsDeduplicated(const FileName: string; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
PDFium scrive prima una copia non incrementale del documento corrente in memoria, poi il wrapper esegue una camminata di raggiungibilità a livello di documento e scarta ogni oggetto irraggiungibile esattamente come SaveAsReachable
Font, immagini e Form XObject vengono poi sottoposti a fingerprint: ogni dizionario candidato, il suo sottografo raggiungibile completo e il suo payload di flusso grezzo vengono sottoposti a hash ricorsivamente, così i duplicati si fondono solo quando il loro intero contenuto è identico
Ogni riferimento incrociato che puntava a un duplicato fuso viene riscritto sul rappresentante sopravvissuto e i numeri e le generazioni degli oggetti restano stabili, così ogni riferimento incrociato sopravvissuto resta valido
L'output è una singola revisione classica senza flussi di oggetti e senza flusso xref, e il trailer ricostruito trasporta in avanti /Root, /Info e /ID
TPdfDedupReport riporta i conteggi di oggetti conservati e potati più i conteggi per categoria di font, immagini e Form XObject fusi, con le dimensioni in byte di sorgente e output e un messaggio di errore strutturatoAllowSignedDocument non sia esplicitamente abilitato perché una riscrittura completa invalida gli intervalli di byte delle firme esistenti
Pdf.SaveAsDeduplicated('deduplicated.pdf', Report);
WriteLn('merged ', Report.MergedImageCount, ' images');