PDFium Delphi Component Docs

CommitIncrementalSave 方法

元件: TPdf  ·  單元: PDFium
把自上次提交以來所做的編輯附加為新的 PDF 修訂版

語法

function CommitIncrementalSave(Stream: TStream; out Info: TPdfIncrementalCommitInfo): Boolean;

Stream完整文件的目的地,包含基準與迄今附加的每個修訂版;nil 會拋出 EPdfError
InfoTPdfIncrementalCommitInfo 接收物件與位元組計數、先前與新的 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

另請參閱

BeginIncrementalSave, EndIncrementalSave, IncrementalSaveActive, SaveAs