PDFium Delphi Component 文件

Incremental save session

组件: 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 语义快照,既作为比较基线,也作为第一个完整输出

每次提交捕获当前状态,解析活动的经典、混合、xref 流和对象流对象,然后比较对象代次和精确主体字节

只有已更改或新增的间接对象会在前次输出之后被写入,随后是最小的必要 xref 和 trailer 修订

经典 xref 源继续使用经典 xref 表,而 xref 流源继续使用自索引的 xref 流

如果没有更改,前次输出会逐字节返回,不追加修订,且 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