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,因為完整重寫會使既有的簽章 byte range 失效/ID;需要穩定識別碼的呼叫者可從輸出位元組自行推導
Pdf.SaveAsReproducible('stable.pdf', Report);
WriteLn('stripped ', Report.StrippedTimestampCount, ' timestamps');