自动 XFA 原生 PDF 创建

Unit: HPDFXFAHeadless

HPDFXFAWriteHeadlessPDF 直接从 XDP 字节和应用提供的 TrueType 字体创建全新原生 PDF,不需要输入 PDF 或预置字段槽位

适配器消费既有的 XFA 绑定、重复实例和分页布局回调,构建原生页面与 AcroForm 对象图,配以真实嵌入字体的外观流

文本、数字、日期和密码字段,push button,combo 与 list 选项,复选框与单选组,静态文本,rectangle、line、arc 以及内联 PNG 或 JPEG 图像 draw 均被消费;签名和更多 draw 消费者需要进一步的适配器集成

选项与布尔创建保留分离的显示与导出值、可编辑与多选行为、原生外观状态和独立的重复单选组

布尔样式与 caption 消费真实矢量标记、尺寸、轮廓颜色与粗细、Unicode caption 区域和第三复选框状态

原生图形与图像消费真实矢量路径、PNG 样本格式与透明、baseline 或 progressive JPEG、物理 aspect 和仿射摆放

密码字段使用掩码外观,同时保留原生字段值;文档级 Editable 与生效的 XFA readOnly 访问共同决定原生字段标志

XFA 点坐标以左上角为原点,一次性转换为原生 widget 矩形和 draw 平移;布局引擎为分离的重复 occurrence 提供互不相同的原生字段名

原生 /AP、/DR 和 /DA 资源用提供的字体和生效的大小、颜色、对齐生成;每个字段都使用所提供字体,因此字形选择和多样式字体在本阶段是应用的责任

当文档需要生命周期或交互事件时,先使用 TXFAWidgetRuntime 执行事件并保存结果 XDP 再创建;适配器的 ScriptOptions 控制 flatten 引擎的 calculate 与 validate 处理

准备与限制

TXFAHeadlessPDFOptions 约束 XDP 与字体字节、输出与对象字节、对象与页数、字段数以及聚合 UTF-16 glyph 单元

对象、页面和 glyph 预算在对应分配前检查;嵌入检查约束聚合字体与图像流,图像解码器约束各自工作缓冲区,原生序列化强制对象和完整候选字节限制

图创建、外观生成和序列化全程检查取消;所有准备失败都保持目标流的位置、长度和既有字节不变

完整候选在内存中准备完毕后,经一次 WriteBuffer 写入目标;目标 I/O 错误按调用方流行为传播,可能留下部分写入

输出是新的未签名文档;保留导入加密、既有签名和源修订属于原生文档导入与修订 API

验收

Tests/Linux/XFAHeadlessCreationTests.pas 在不打开阅读器 UI 的情况下产出真实的重复、分页和全局只读文档、经事件变更的保存 XDP 文档以及带样式的 Unicode draw 文档

Tests/Linux/Verify-XFAHeadlessCreation.py 用 pypdf 独立验证原生值、字段标志、页面归属、/AP 与嵌入字体资源,用 MuPDF 验证真实文本和渲染外观像素

Tests/Linux/XFAHeadlessChoiceTests.pas 与 Verify-XFAHeadlessChoice.py 另加真实选项值与标志、单选父级与重复作用域标识、保留导出状态、运行时保存/重载与回滚,以及渲染选中像素

TXFAHeadlessPDFResult 报告实际原生图与序列化计数