PDFiumPas 文件

增量儲存工作階段

元件: TPdf  ·  單元: PDFium
僅附加已變更或新增的間接物件,同時完整保留先前的每個輸出位元組

Syntax

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目的地寫入成功後回傳的每次認可統計資料

Commit Information

ChangedObjectCount此認可所附加的已變更或新增間接物件數
AppendedByteCount附加在上一個完整輸出前綴之後的位元組數
OutputByteCount此認可回傳之完整輸出的總位元組數
RevisionCount目前工作階段中已認可的非空白修訂版本數

Description

BeginIncrementalSave 會擷取穩定的 PDFium 語意快照,同時作為比較基準與第一個完整輸出

每次認可都會擷取目前狀態,解析作用中的 classic、hybrid、xref-stream 與 object-stream 物件,然後比較物件世代與確切的內文位元組

只有已變更或新增的間接物件會寫入在先前輸出之後,並附加所需的最小 xref 與 trailer 修訂

classic-xref 來源會繼續使用 classic xref 表,而 xref-stream 來源會繼續使用自我索引的 xref stream

如果沒有任何變更,會逐位元組回傳上一個輸出,不附加任何修訂版本,RevisionCount 也不會前進

檔案多載會寫入同目錄暫存檔、以原子方式取代目的地,並在寫入或取代失敗時還原工作階段狀態

Constraints

Example

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;

See Also

SaveAs, SaveAsObjectStream