function SaveAsReproducible(Stream: TStream; out Report: TPdfReproducibleReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsReproducible(const FileName: string; out Report: TPdfReproducibleReport; AllowSignedDocument: Boolean = False): Boolean;
对象顺序已经稳定(对象号递增),内容哈希 /ID 派生是确定性的,因此剩余的非确定性是 PDFium 写入 /Info 的墙上时钟 /CreationDate 和 /ModDate
StripDictionaryEntries 从 /Info 主体移除这些时间戳键,重建的 trailer 省略源 /ID(它派生自带时间戳的字节)
不可达对象也像 SaveAsReachable 一样被清扫,对象号和代次保持稳定
TPdfReproducibleReport 报告保留和裁剪的对象数以及剥离的时间戳条目数AllowSignedDocument,否则拒绝签名文档,因为完整重写会使现有签名字节范围失效/ID;需要稳定标识符的调用方可以从输出字节派生一个
Pdf.SaveAsReproducible('stable.pdf', Report);
WriteLn('stripped ', Report.StrippedTimestampCount, ' timestamps');