function SaveAsDeduplicated(Stream: TStream; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsDeduplicated(const FileName: string; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
PDFium schreibt zunächst eine nicht-inkrementelle Kopie des aktuellen In-Memory-Dokuments, dann führt der Wrapper einen dokumentweiten Erreichbarkeits-Durchlauf durch und verwirft jedes unerreichbare Objekt, genau wie SaveAsReachable
Schriften, Bilder und Form-XObjects werden anschließend mit Fingerabdrücken versehen: Jedes Kandidaten-Wörterbuch, sein vollständiger erreichbarer Teilgraph und seine rohe Stream-Nutzlast werden rekursiv gehasht, sodass Duplikate nur dann zusammengeführt werden, wenn ihr gesamter Inhalt identisch ist
Jeder Querverweis, der auf ein zusammengeführtes Duplikat zeigte, wird auf den überlebenden Vertreter umgeschrieben, und Objektnummern und Generationen bleiben stabil, sodass jeder überlebende Querverweis gültig bleibt
Die Ausgabe ist eine einzelne klassische Revision ohne Objekt-Streams und ohne Querverweis-Stream, und der neu aufgebaute Trailer führt /Root, /Info und /ID fort
TPdfDedupReport meldet behaltene und entfernte Objektanzahlen plus zusammengeführte Schrift-, Bild- und Form-XObject-Zahlen pro Kategorie, mit Quell- und Ausgabebytemengen und einer strukturierten FehlermeldungAllowSignedDocument nicht ausdrücklich aktiviert ist, weil eine vollständige Neuschreibung vorhandene Signatur-Bytebereiche ungültig macht
Pdf.SaveAsDeduplicated('deduplicated.pdf', Report);
WriteLn('merged ', Report.MergedImageCount, ' images');