THotPDF.SaveIncrementalUpdate

THotPDF

 

上一页  方法  THotPDF

写入原始 PDF 字节,随后追加 dirty objects、新的 xref subsection,以及带 /Prev 指针的 trailer

 

Delphi 语法:

procedure SaveIncrementalUpdate(const TargetFile: TFileName);

 

C++ 语法:

void __fastcall SaveIncrementalUpdate(System::Sysutils::TFileName TargetFile);

 

procedure SaveIncrementalUpdate(const TargetFile: TFileName); overload;

有界重载

procedure SaveIncrementalUpdate(const TargetFile: TFileName;
  MaxOutputBytes: Int64; Checkpoint: TNotifyEvent); overload;

MaxOutputBytes 为正时要求先调用 BeginIncrementalUpdate,并把完整原始前缀加追加增量一并限定在该上限内;负值非法,零保留旧的无界行为

正上限重载把增量转存到临时存储,序列化超过上限时在发布前抛出 EHPDFIncrementalOutputBudget,该失败路径会保留既有目标文件

Checkpoint 在对象遍历与发布拷贝期间收到文档,在写入期间收到内部转存流;不要依赖特定的 Sender 类型

对独立目标而言,这个低级保存不是原子替换 API;发布期间取消或 I/O 失败可能留下不完整文件,需要原子外部发布时请改用私有候选文件或经验证的增量签名作业

说明

SaveIncrementalUpdate 完成 BeginIncrementalUpdate 开启的工作流。只访问并输出更改、新增和删除的对象,外加稀疏 xref 子区段和 /Prev 指向前一修订的 trailer

目标是其他文件时,先把原始前缀从文件承载的源顺序复制过去,再追加完成的增量。目标是同一文件时,HotPDF 校验源标识、长度和写入时间,释放惰性源句柄,直接追加并刷盘;追加失败则截回原长度。两条路径都保留既有字节区间和早期签名

 

没有对象脏或被删除时,目标与源逐字节相同,不追加任何 xref 区段、trailer、换行或 EOF 标记。需要新修订时,第一个 trailer ID 保持稳定,只有第二个修改 ID 轮换

加密源的追加 trailer 保留原始 /Encrypt 表示形式:间接字典保留其对象与 generation 引用,直接的 trailer 字典则保留其未改动的安全处理器字节。重写的字符串与流仍受源安全处理器保护,结果文档继续接受原始 Standard user / owner 口令或公钥收件人凭据

向同一目标追加成功后,会消耗所持有的来源,因为原始修订已被就地改动。创建下一个修订之前,请再次调用 BeginIncrementalUpdate。GetIncrementalUpdateSourceInfo 会暴露保留的字节数、探测字节数、复制与追加次数、被跟踪的更改、访问过的对象、xref 条目、锁定状态和消耗状态

破坏性编辑自动重建完整的活动空闲对象链。既有空闲 generation 保留,新释放的 generation 递增至 65535,重写对象保持原 generation,每个输出条目按对象号排序。GetLastIncrementalXRefRebuildInfo 在保存后返回源、迁移、饱和与重建链计数

添加后续签名修订时,请在准备或插入新签名之前调用此方法。追加文件存在后,再用常规签名辅助方法预留并填充新签名值

对已认证或含使用权限的文档,SaveIncrementalUpdateAuthenticated 写同目录候选文件,认证每个带策略的签名,强制检查每个后续修订,全部策略接受更新后才原子替换目标

 

另请参阅: BeginIncrementalUpdate, MarkDirty, SaveIncrementalUpdateAuthenticated、GetIncrementalUpdateSourceInfo、GetLastIncrementalXRefRebuildInfo、AcroForm 支持, PDF 过滤器支持