function SaveAsDeduplicated(Stream: TStream; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsDeduplicated(const FileName: string; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
PDFium escribe primero una copia no incremental del documento actual en memoria y luego el contenedor realiza un recorrido de alcanzabilidad sobre todo el documento y descarta cada objeto inalcanzable, exactamente como SaveAsReachable
Después se calculan las huellas digitales de las fuentes, las imágenes y los form XObjects: cada diccionario candidato, todo su subgrafo alcanzable y su carga útil de stream sin procesar se hashan de forma recursiva, de modo que los duplicados se fusionan solo cuando su contenido completo es idéntico
Cada referencia cruzada que apuntaba a un duplicado fusionado se reescribe hacia el representante superviviente, y los números y generaciones de objeto permanecen estables para que toda referencia cruzada superviviente siga siendo válida
La salida es una única revisión clásica sin object streams ni cross-reference stream, y el trailer reconstruido propagan /Root, /Info e /ID
TPdfDedupReport informa los conteos de objetos conservados y podados más los conteos por categoría de fuentes, imágenes y form XObjects fusionados, con los tamaños en bytes de origen y de salida y un mensaje de falla estructuradoAllowSignedDocument se habilite de forma explícita, porque una reescritura completa invalida los rangos de bytes de las firmas existentes
Pdf.SaveAsDeduplicated('deduplicated.pdf', Report);
WriteLn('merged ', Report.MergedImageCount, ' images');