procedure BeginIncrementalSave(AllowSignedDocument: Boolean = False);
function CommitIncrementalSave(Stream: TStream; out Info: TPdfIncrementalCommitInfo): Boolean;
function CommitIncrementalSave(const FileName: string; out Info: TPdfIncrementalCommitInfo): Boolean;
procedure EndIncrementalSave;
property IncrementalSaveActive: Boolean;
| AllowSignedDocument | 明確允許在已簽署文件上開啟工作階段;預設會加以拒絕 |
| Stream | 在此認可之後接收完整累積 PDF 的 TStream |
| FileName | 只有在同目錄暫存檔成功寫入後才會被取代的輸出路徑 |
| Info | 目的地寫入成功後回傳的每次認可統計資料 |
| ChangedObjectCount | 此認可所附加的已變更或新增間接物件數 |
| AppendedByteCount | 附加在上一個完整輸出前綴之後的位元組數 |
| OutputByteCount | 此認可回傳之完整輸出的總位元組數 |
| RevisionCount | 目前工作階段中已認可的非空白修訂版本數 |
BeginIncrementalSave 會擷取穩定的 PDFium 語意快照,同時作為比較基準與第一個完整輸出
每次認可都會擷取目前狀態,解析作用中的 classic、hybrid、xref-stream 與 object-stream 物件,然後比較物件世代與確切的內文位元組
只有已變更或新增的間接物件會寫入在先前輸出之後,並附加所需的最小 xref 與 trailer 修訂
classic-xref 來源會繼續使用 classic xref 表,而 xref-stream 來源會繼續使用自我索引的 xref stream
如果沒有任何變更,會逐位元組回傳上一個輸出,不附加任何修訂版本,RevisionCount 也不會前進
檔案多載會寫入同目錄暫存檔、以原子方式取代目的地,並在寫入或取代失敗時還原工作階段狀態
AllowSignedDocument 為 True,否則已簽署的文件會被拒絕;明確許可不會驗證 DocMDP 或 FieldMDP 政策EPdfErrorCompressed 屬性無關,因此物件比較保持穩定
var
Info: TPdfIncrementalCommitInfo;
begin
Pdf.BeginIncrementalSave;
try
Pdf.PageNumber := 1;
Pdf.PageRotation := ro90;
Pdf.CommitIncrementalSave('revision-1.pdf', Info);
Pdf.PageRotation := ro180;
Pdf.CommitIncrementalSave('revision-2.pdf', Info);
finally
Pdf.EndIncrementalSave;
end;
end;