内容操作符访问器

HotPDF 通过引用计数访问器接口和 Delphi 事件回调暴露解码内容流中的每个操作,而无需调用方编写 PDF 标记化器

检查与测量

THPDFContentOperatorEventData 标识开始流、操作符和结束流阶段,并在当前源操作符执行前报告操作索引、操作符名称、操作数计数、字节范围和确定性状态

状态包含图形状态、文本对象、标记内容和兼容性部分深度,而 THPDFContentOperatorView 按需提供只读操作或操作数字节,而无需复制完整源流

变换或拒绝

回调选择 coaKeep、coaDelete、coaReplace、coaStop 或 coaReject

删除和替换动作成为排序后的非重叠 AST 编辑;拒绝不发布输出,coaStop 在当前操作符后成功完成

状态快照遵循原始源遍历,即使操作被替换,使重复检查保持确定性

预算与验证

THPDFContentOperatorVisitOptions.Default 配置 MaxSourceBytes、MaxOperators、MaxLexemes、MaxDepth、MaxReplacementBytes 和 ValidateOutput

取消在遍历期间检查,变换后的输出在可以返回或写入已加载页面之前,会在相同的词素、深度和操作符限制下再次解析

格式错误的输入、无效的替换输出、回调异常、限制失败和显式拒绝由 THPDFContentOperatorVisitStatus 和诊断区分

已加载页面注册

PDF.ContentOperatorVisitor := Visitor;
PDF.OnContentOperator := HandleContentOperator;
Options := THPDFContentOperatorVisitOptions.Default;
if PDF.VisitLoadedPageContentOperators(0, True, Options,
  CancellationToken, Statistics) then
  UseStatistics(Statistics);

当两者都分配时,接口访问器在事件回调之前运行,并且两者都在调用线程上同步执行

使用 ApplyChanges=True 时,HotPDF 首先验证完整的变换流,然后在一个图变更中替换页面内容,并使编译的显示列表、栅格、磁盘、字体解码器和缩略图缓存失效

相关 API