function CommitIncrementalSave(Stream: TStream; out Info: TPdfIncrementalCommitInfo): Boolean;
| Stream | 完整文件的目的地,包含基準與迄今附加的每個修訂版;nil 會拋出 EPdfError |
| Info | TPdfIncrementalCommitInfo 接收物件與位元組計數、先前與新的 xref 偏移、修訂版數、加密與驗證狀態,以及檔案持久性結果 |
| 結果 | 寫入完整且通過驗證的輸出時為 True |
function CommitIncrementalSave(const FileName: string; out Info: TPdfIncrementalCommitInfo): Boolean;
| FileName | 目的地檔案,透過同目錄中持久化的側檔以原子方式取代 |
| Info | 與串流多載相同的 TPdfIncrementalCommitInfo 報告,在那些檔案階段成功後設定 Durable 與 ReplacedAtomically |
| 結果 | 通過驗證的側檔取代目的地後為 True |
把即時文件與上次提交時擷取的狀態比對(第一次提交則與基準比對),並附加變更的物件與全新的交叉參照區段。較早的位元組絕不會改寫,因此每個先前的修訂版都保持位元組相同且可復原
AppendedByteCount 只是新修訂版的大小,而 PreviousOutputByteCount 與 OutputByteCount 界定不可變的前置部分與完整結果。PreviousXrefOffset 與 OutputXrefOffset 識別修訂版鏈,ChangedObjectCount 則回報差異找到多少物件
每個候選輸出都會通過疏落修訂版邊界檢查、嚴格的獨立重新開啟、頁數與安全性處理器檢查,以及存在時的 PDF MAC 驗證。Encrypted 與 Validated 回報這些屬性
檔案多載在目標旁寫入暫存檔、Flush 暫存檔、關閉後重新開啟,再次驗證,最後提交原子式取代。Windows 要求 Write-through 取代;Unix 在取代之前確認目錄 Flush 支援,重新命名後 Flush 父目錄
取代之前失敗會保留舊目標,還原工作階段基準與修訂數。Unix 成功重新命名後若目錄 Flush 失敗,內部 FPdfPlatform 單元會拋出 EPdfOutputCommitError:輸出已經取代,Info.ReplacedAtomically=True 且 Info.Durable=False,工作階段保留已提交基準,避免後續編輯附加到過期輸出
Durable 回報平台要求的 Flush 階段是否全部成功,不保證儲存硬體或檔案系統在斷電後的行為。其他使用相同原子式取代的檔案儲存 API,也可能在取代後拋出這種輸出已提交的例外;呼叫端必須區分此階段與仍保留舊輸出的失敗
沒有開啟的工作階段就呼叫會拋出 EPdfError,因此必須先呼叫 BeginIncrementalSave