function SaveAsDeduplicated(Stream: TStream; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsDeduplicated(const FileName: string; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
PDFium primero escribe una copia no incremental del documento en memoria actual, luego el envoltorio realiza un recorrido de alcanzabilidad en todo el documento y descarta cada objeto inalcanzable exactamente como SaveAsReachable
Las fuentes, imágenes y XObjects de formulario se identifican entonces por huella: cada diccionario candidato, su subgrafo alcanzable completo y su carga de flujo sin procesar se hashean recursivamente, de modo que los duplicados se fusionan solo cuando todo su contenido es idéntico
Cada referencia cruzada que apuntaba a un duplicado fusionado se reescribe al representante superviviente, y los números de objeto y generaciones permanecen estables de modo que cada referencia cruzada superviviente siga siendo válida
La salida es una única revisión clásica sin flujos de objeto y sin flujo de referencias cruzadas, y el trailer reconstruido lleva /Root, /Info y /ID hacia adelante
TPdfDedupReport reports kept and pruned object counts plus per-category merged font, image, and form XObject counts, with source and output byte sizes and a structured failure messageAllowSignedDocument is explicitly enabled because a full rewrite invalidates existing signature byte ranges
Pdf.SaveAsDeduplicated('deduplicated.pdf', Report);
WriteLn('merged ', Report.MergedImageCount, ' images');