/Info 字典可达的间接对象function SaveAsReachable(Stream: TStream; out Report: TPdfPruneReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsReachable(const FileName: string; out Report: TPdfPruneReport; AllowSignedDocument: Boolean = False): Boolean;
PDFium 先写出当前内存文档的非增量副本,使重写从规范字节开始
然后解析对象图,从目录进行的文档级可达性遍历收集每个存活的间接对象,包括页面树、页面资源、字体、图像、表单 XObject、AcroForm、结构树、大纲、名称树、可选内容、元数据、输出意图和关联文件
因增量更新、页面合并或修复保存而不可达的对象被丢弃,输出是单个经典修订,无对象流和交叉引用流
对象号和代次被保留,因此每个存活的交叉引用无需重新编号即可保持有效;不可达对象在重建的经典交叉引用表中成为空闲条目
仅当引用的对象在清扫中存活时,重建的 trailer 才将 /Root、/Info 和 /ID 向前携带
TPdfPruneReport 报告保留和裁剪的间接对象数、源和输出字节大小以及结构化失败消息AllowSignedDocument,否则拒绝签名文档,因为完整重写会使现有签名字节范围失效
Pdf.SaveAsReachable('pruned.pdf', Report);
WriteLn('Kept ', Report.KeptObjectCount, ' pruned ', Report.PrunedObjectCount);