高级 AcroForm 处理
HotPDF 可以重新计算已加载字段、重新生成基于标准的可变文本外观、解析批注外观状态,并扁平化所选字段集而不重写未触及的页面
计算顺序
RecalculateLoadedFormFields 遵循已加载的 /AcroForm /CO 数组,并通过安全的字段脚本求值器求值有界的 AFSimple_Calculate 操作 SUM、AVG、PRD、MIN 和 MAX
ApplyLoadedFieldCalculation 安装计算动作并将目标字段添加到 /CO,且不产生重复条目
安全字段脚本
EvaluateLoadedFieldJavaScript 只求值与请求的字段触发器关联的声明式计算和验证语句
- 表达式支持布尔、数字、字符串、null、undefined 和数组值,带算术、一元、比较、相等、短路逻辑和条件运算符
event.value保留字符串输入语义,而数字字段文本保持数字,以便与现有计算兼容- 允许列表中的辅助函数涵盖数字和字符串转换、解析、选定的
Math函数、确定性的 UTC 日期解析和构造,以及有界的字符串和数组检查 AFSimple_Calculate、AFRange_Validate、event.value赋值和event.rc赋值提供确定性的计算和验证结果- 循环、动态求值、应用访问、提交、导入、启动和其他活动内容会被拒绝
- 限制为 8,192 个脚本字节、32 条语句、4,096 个表达式字节、32 个解析器层级、1,024 次操作、64 个参数、128 个数组项、65,536 个字符串字节和 262,144 字节的跟踪值
可变文本外观
EnsureLoadedFieldAppearanceStream 遍历每个 widget,并从字段层级或 AcroForm 继承 /DA、/Q、/V、/DV、/Ff 和 /MaxLen 值
- 左、中、右 quad 使用 widget 的本地外观坐标
- 多行文本接收有界的行放置和裁剪
- 零默认外观字号触发自动调整大小
- Comb 字段在
/MaxLen个单元格中独立放置每个字符
批注外观状态
GetLoadedAnnotationAppearanceStream 解析普通、悬停或按下外观,并从悬停或按下回退到普通
状态字典按顺序使用 /AS、继承的 /V 或 /DV、父状态、/Off 和唯一流回退
选择性扁平化
FlattenLoadedFormFields 只将选定的 widget 外观绘制到其所属页面,只移除匹配的字段和批注,并保留每个未触及的页面和字段
默认权限门在 DocMDP 下拒绝结构更改,并在任何页面被修改前强制 FieldMDP All、Include 和 Exclude 锁
PDF.BeginIncrementalUpdate('SignedForm.pdf');
PDF.RecalculateLoadedFormFields;
PDF.FlattenLoadedFormFields(['Subtotal', 'Total']);
PDF.SaveIncrementalUpdate('SignedForm-updated.pdf');