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
Далі знімаються відбитки шрифтів, зображень та Form XObjects: кожен словник-кандидат, його повний досяжний підграф і сире наповнення потоку хешуються рекурсивно, тож дублікати зливаються, лише коли весь їхній вміст ідентичний
Кожне перехресне посилання, що вказувало на злитий дублікат, переписується на представника, що лишився, а номери об'єктів і покоління залишаються стабільними, тож кожне перехресне посилання, що вижило, лишається чинним
Результатом є одна класична ревізія без потоків об'єктів і без потоку перехресних посилань, а перебудований трейлер успадковує /Root, /Info і /ID
TPdfDedupReport звітує кількості збережених і видалених об'єктів, а також кількості злитих шрифтів, зображень та Form XObjects за категоріями, разом із байтовими розмірами джерела й результату та структурованим повідомленням про невдачуAllowSignedDocument, бо повний перезапис анулює наявні байтові діапазони підписів
Pdf.SaveAsDeduplicated('deduplicated.pdf', Report);
WriteLn('merged ', Report.MergedImageCount, ' images');