function SaveAsDeduplicated(Stream: TStream; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsDeduplicated(const FileName: string; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
PDFium écrit d’abord une copie non incrémentale du document en mémoire courant, puis l’enveloppe effectue une marche d’accessibilité à l’échelle du document et abandonne chaque objet inaccessible exactement comme SaveAsReachable
Les polices, images et XObjects de formulaire sont ensuite empruntés : chaque dictionnaire candidat, son sous-graphe accessible complet et sa charge utile de flux brute sont hachés récursivement, de sorte que les doublons ne fusionnent que lorsque leur contenu entier est identique
Chaque référence croisée qui pointait vers un doublon fusionné est réécrite vers le représentant survivant, et les numéros d’objet et générations restent stables afin que chaque référence croisée survivante reste valide
La sortie est une seule révision classique sans flux d’objet et sans flux de références croisées, et le trailer reconstruit porte /Root, /Info et /ID en avant
TPdfDedupReport rapporte les comptages d’objets conservés et élagués plus les comptages de police, d’image et de Form XObject fusionnés par catégorie, avec les tailles d’octets source et sortie et un message d’échec structuréAllowSignedDocument est explicitement activé car une réécriture complète invalide les plages d’octets de signature existantes
Pdf.SaveAsDeduplicated('deduplicated.pdf', Report);
WriteLn('merged ', Report.MergedImageCount, ' images');