function SaveAsDeduplicated(Stream: TStream; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsDeduplicated(const FileName: string; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
PDFium najpierw zapisuje nieprzyrostową kopię bieżącego dokumentu w pamięci, a następnie otoczka wykonuje pełne przejście osiągalności po dokumencie i porzuca każdy nieosiągalny obiekt dokładnie tak jak SaveAsReachable
Potem czcionki, obrazy i XObjecty formularzy otrzymują odciski: każdy słownik kandydat, jego pełny osiągalny podgraf i jego surowy ładunek strumienia są haszowane rekurencyjnie, dzięki czemu duplikaty są scalane tylko wtedy, gdy ich cała treść jest identyczna
Każde odwołanie krzyżowe, które wskazywało scalony duplikat, jest przepisywane na przetrwałego reprezentanta, a numery obiektów i generacje pozostają stabilne, dzięki czemu każde zachowane odwołanie krzyżowe pozostaje ważne
Wynikiem jest pojedyncza klasyczna rewizja bez strumieni obiektów i bez strumienia odwołań krzyżowych, a przebudowany trailer przenosi dalej /Root, /Info i /ID
TPdfDedupReport raportuje liczby zachowanych i usuniętych obiektów oraz scalone liczby czcionek, obrazów i XObjectów formularzy w podziale na kategorie, wraz z rozmiarami bajtowymi źródła i wyjścia oraz ustrukturyzowanym komunikatem niepowodzeniaAllowSignedDocument zostało jawnie włączone, ponieważ pełne przepisanie unieważnia istniejące zakresy bajtowe podpisów
Pdf.SaveAsDeduplicated('deduplicated.pdf', Report);
WriteLn('merged ', Report.MergedImageCount, ' images');