function SaveAsDeduplicated(Stream: TStream; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsDeduplicated(const FileName: string; out Report: TPdfDedupReport; AllowSignedDocument: Boolean = False): Boolean;
PDFium เขียนสำเนาแบบไม่ใช่ incremental ของเอกสารในหน่วยความจำปัจจุบันก่อน จากนั้น wrapper จะเดินตรวจการเข้าถึงได้ทั่วทั้งเอกสารและทิ้งออบเจ็กต์ที่เข้าถึงไม่ได้ทุกตัว ในลักษณะเดียวกับ SaveAsReachable
จากนั้นฟอนต์ รูปภาพ และ form XObject จะถูกสร้าง fingerprint โดย hash dictionary ผู้สมัครแต่ละตัว พร้อมด้วย subgraph ที่เข้าถึงได้ทั้งหมด และ raw stream payload ของมันแบบ recursive ดังนั้นรายการที่ซ้ำกันจะถูกรวมเฉพาะเมื่อเนื้อหาทั้งหมดของทั้งสองตรงกันทุกประการเท่านั้น
cross-reference ทุกรายการที่เคยชี้ไปยังรายการซ้ำที่ถูกรวมไป จะถูกเขียนใหม่ให้ชี้ไปยังตัวแทนที่เหลืออยู่ และหมายเลขออบเจ็กต์พร้อม generation ยังคงเสถียร ทำให้ cross-reference ทุกรายการที่เหลืออยู่ยังคงใช้ได้
ผลลัพธ์คือ revision แบบ classic เดียวที่ไม่มี object stream และไม่มี cross-reference stream โดย trailer ที่สร้างใหม่จะส่ง /Root, /Info และ /ID ต่อไป
TPdfDedupReport รายงานจำนวนออบเจ็กต์ที่เก็บไว้และที่ตัดทิ้ง พร้อมจำนวนฟอนต์ รูปภาพ และ form XObject ที่ถูกรวมแยกตามหมวดหมู่ รวมถึงขนาดไบต์ของต้นทางและผลลัพธ์ และข้อความความล้มเหลวแบบมีโครงสร้างAllowSignedDocument อย่างชัดแจ้ง เนื่องจากการเขียนใหม่ทั้งเอกสารจะทำให้ช่วงไบต์ของลายเซ็นเดิมใช้ไม่ได้
Pdf.SaveAsDeduplicated('deduplicated.pdf', Report);
WriteLn('merged ', Report.MergedImageCount, ' images');