原生 XFA exData XML
一般事件宿主会创建缺失的 exData 值属性,并把真实的外来 XML 子节点导入其原生表单 occurrence;XHTML draw 内容在原生 XDP 持久化和重新加载后进入富文本 PDF 消费者
导入与读取 XML
const content = row.label.value.exData;
content.contentType = "text/html";
content.loadXML(
'<body xmlns="http://www.w3.org/1999/xhtml">' +
'<p><span style="font-size:18pt;color:#0000FF">Changed</span></p>' +
'</body>',
false,
true
);
const currentXML = content.saveXML();
const readableXML = content.saveXML("pretty");
loadXML(source, ignoreRoot=true, overwrite=false) 接受格式良好的 XML 文档字符串并返回 undefined;ignoreRoot 追加聚合根的子节点,false 则追加根本身
overwrite 在导入前替换既有内容;默认 false 按文档顺序追加内容,保留此前导入的子节点
saveXML() 把当前 exData 元素及其内容作为 UTF-8 XML 声明和片段字符串返回;可选字面量 pretty 为纯元素内容添加缩进,同时保留混合文本与 CDATA 空白
导入的元素名、命名空间声明、命名空间限定属性、字面 Unicode、字符引用、混合文本和 CDATA 都保持原生 XML;标记不会存成普通 rawValue 字符串
创建与默认值
值属性只允许一个 exData 子节点,与其他值选项互斥;缺失的 draw 值和 exData 子节点可以在同一事件中创建并导入
exData 默认 maxLength=-1 和 transferEncoding=none,contentType、href、id、name、rid、use 和 usehref 属性为空
事件宿主不在 exData 上暴露标量值访问器;外来 XML 内容请使用 loadXML 和 saveXML
即时读取、标识与事务
纯原生 XML 操作在脚本继续执行前验证并序列化每个请求;格式错误的 XML 在脚本内抛出,可由 try/catch 处理而不改变当前内容
确定性响应重放共享既有脚本事务,不执行任何 UI、文件、网络或传输副作用
同一事件内后续的 saveXML 调用能看到更早的成功导入和当前 exData 属性;保留的引用在后续事件中解析当前节点标识
只有目标重复 occurrence 接收原生内容;新 occurrence 从模板 XML 初始化,而不是复制另一 occurrence 的导入覆盖
空导入根配合 overwrite=true 会清空实际内容,并在持久化和重新加载后保持为空;它不会回退到模板内容
未处理的脚本错误和原生发布失败会恢复精确的原生 XDP 字节,包括更早的普通字段写入和 XML 变更
预算与保存消费
脚本限制约束 XML 输入输出字节、原生元素与文本节点、深度、操作、耗时和重放响应;widget 的 MaxValueChars 同样约束发布的 XML 值
FPC bridge 在 XML 响应和普通动作值中原样保留 UTF-8 字节,包括带变音符的字符和增补 Unicode
保存的 XHTML draw 内容沿用既有富文本消费者的字体、大小、颜色和行内 CSS 行为;独立 PDF 阅读器验证第一实例文本、替换样式、新实例内容和显式清空
剩余 XML 集成目标
本次交付实现了 exData 内容操作;其他 nodeclass 的 loadXML/saveXML 方法、Data DOM 结构导入和一般外来节点修改仍是独立目标
DTD 声明和自定义实体目录仍未实现;预定义实体以及十进制或十六进制字符引用受支持
元素内注释与处理指令在导入、即时读取、保存、重载和回滚全程保持原生;根之外的文档级标记和完整的 XML 词法往返仍是独立目标
外部 href 解析、编码的 exData 传输、maxLength 强制执行、外来媒体消费者和 Unicode 富 widget 外观仍是独立的实现目标
参考与相关 API
导入根与替换语义遵循 Adobe XFA Element API;XML 名称、引用和空白遵循 XML 1.0
参见 TXFAEventBinding、TXFAEventActionKind、Rich Text Properties 与 Interactive XFA Runtime