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 语义快照,既作为比较基线,也作为第一个完整输出
每次提交捕获当前状态,解析活动的经典、混合、xref 流和对象流对象,然后比较对象代次和精确主体字节
只有已更改或新增的间接对象会在前次输出之后被写入,随后是最小的必要 xref 和 trailer 修订
经典 xref 源继续使用经典 xref 表,而 xref 流源继续使用自索引的 xref 流
如果没有更改,前次输出会逐字节返回,不追加修订,且 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;