Windows 原始 typed 富文本表单填充
Windows 文件 job 与 hpdf_document_execute_json_v1 接受在普通 text、choice 与按钮更新之外含 richTextRuns 的 forms.fill 请求;所有字段共享同一个已认证候选 PDF
原始 typed run 直达原生外观合成器;AP 生成不经序列化 RV 颜色表示往返;普通 V、标准富 RV 与真实 AP 一起准备
请求
{
"schemaVersion": 1,
"type": "forms.fill",
"fontFamilies": ["DejaVu Sans", "DejaVu Serif Condensed"],
"fields": [
{"name": "Input", "richTextRuns": [
{"text": "Original typed precision", "fontFamily": "DejaVu Sans",
"fontStyle": "regular", "fontSize": 12.123456,
"color": [0.123456, 0.234567, 0.345678]},
{"text": "Another paragraph", "fontFamily": "DejaVu Serif Condensed",
"fontStyle": "boldItalic", "fontSize": 14.125,
"paragraphBreakBefore": true, "alignment": "center",
"underline": true, "strikeOut": false}
]},
{"name": "Plain", "value": "Changed scalar"},
{"name": "Choice", "values": ["B", "C"]},
{"name": "Check", "value": "Yes"}
]
}
每个字段提供 richTextRuns 或 scalar 的 value/values;richTextRuns 旁的可选 value 必须与原生派生的纯文本完全一致,包括 typed 段落之间的回车;序列化的 richText 不是 typed-run 输入
每个 run 必须有 text,接受 fontStyle、fontSize、color、underline、strikeOut、paragraphBreakBefore 与 alignment;fontStyle 为 regular、bold、italic 或 boldItalic;alignment 为 left、center 或 right;RGB 分量是 0 到 1 的有限数字
run 尺寸必须为正且至多 4096 点;缺失尺寸使用字段 fontSize 或 12 点;原生 PDF 数值格式化仍然生效,而标准 RV CSS 把颜色序列化为八位分量
字段外观选项包括 fontSize、padding、characterSpacing、wordSpacing 与 paintWhiteBackground;必须生成真实 AP,因此 appearance=false 无效
真实字体程序
字段级 fontFamilies 数组覆盖操作级数组;配置数组包含一到十六个非空的有效字体族标签;匹配折叠 ASCII 大小写并精确比较其他 Unicode;显式的 run fontFamily 必须匹配某个配置标签,缺失的 run 标签选择第一个字体族
没有 fontFamilies 时,原始单字体族路径仍然可用;字体 callback 标签来自字段 fontFamily、操作 fontFamily 或 DejaVu Sans;原始单字体族 run 省略 run fontFamily
文件 job 添加 input、output 与 fonts;fonts 把每个配置的字体族标签映射到 regular、bold、italic 与 boldItalic 文件路径;只加载用到的样式与 scalar 外观所需的 regular face;文件路径不得与输出互为别名
带版本的 C ABI 调用方使用既有 hpdf_form_data_operation_v1 扩展,并从其字体 callback 返回可读的 hpdf_io_v1 表;字体族标签为 UTF-8,样式值为 0 到 3;所有真实程序在组合外观之前复制进有界的自有字节
原始 V1 符号、基础结构尺寸与可选扩展偏移不变;字体族/样式资产在一个请求内缓存并跨字段共享,同一自有分配不会被重复计费
可选的 fallbackFontFamilies=true 在真实提供的字体族之间应用整字素 fallback;typed run 可以保留有序的 fontFamilyCandidates 数组,声明的候选先于配置顺序考虑;请求继承与四样式 callback 加载见 Windows supplied-family 富文本字体 fallback
当前 graph 与发布
没有 InputIO 时,C ABI 使用其自有的已加载修订与真实挂起 graph;可选 InputIO 提供替换 PDF,在任何字体 callback 之前私有复制并认证;借用输入的变更或失败的替换都不得改动已提交上下文
OutputIO 与 ResultIO 必需;真实候选 PDF 与结果 JSON 都必须成功完成,然后通过最终取消检查点,C ABI 才交换文档与源
失败的 callback 可能已收到候选字节;返回状态非零时调用方必须丢弃这些字节;先前已提交的库上下文保持不变
文件 job 在原子替换请求输出之前暂存完整候选与有界回复;缺失字体、策略失败、取消或容量失败保留既有目标
策略与结果
既有签名完整性、DocMDP P1/P2/P3、FieldMDP 锁定、只读标志与 AES 表单填充权限通过原生已认证引擎强制执行;signaturePolicy 接受与 Windows 表单导入相同的显式信任、时间戳与吊销设置
只读同输入更新只在真实 AP 操作符、字体、资源与字段值等价时成功;压缩 AP 流与非规范等价 RV 受支持;真实的样式变更仍是变更,即使其 RV 颜色量化为同一 CSS 值
真实未变更的请求在策略认证后发布已准备当前修订的精确字节;挂起 graph 编辑在比较之前物化进该当前修订
成功回复包含 typedRichText=true、typedRichProfile=original-typed-runs-v1、updated、fieldCount、fontBytes 以及来自真实已准备候选的 fields;formDataExchange.typedRichFill 描述这些已实现入口点
每个 fields 条目保留普通的 name、scalar value 与 fieldType 摘要;由数组支撑的 choice 在此摘要中标量值为空,而其完整选择保留在已保存 PDF 及后续 FDF/XFDF 导出中
直接的 ExecuteLoadedOperation job 门面与旧式 HPDFDocRunJob 句柄/字体 callback 扩展仍是单独工作;本绑定不添加注释、内嵌文件、action 或增量 FDF 交换