我需要预先填写动态 PDF 的字段,以便我的用户可以对其进行编辑并提交回来。
我正在使用 Adobe ColdFusion CFPDFFORM 标签,它可以将 XML 数据加载到 PDF 中并制作一个新的填充 PDF。不幸的是,它也清除了<xfa:datasets>标签,它完全清空了它!所以绑定到数据集的所有下拉列表都不起作用。这是绑定其中之一的代码:
<bindItems ref="xfa.datasets.LOVFile.LOV.PreferenceLanguageList.PreferenceLanguage[*]" labelRef="$" valueRef="lic"/>
由于我无法控制 CFPDFFORM 标签的工作方式,因此我想出了一个解决方法。使用 LiveCycle Designer 进行编码,我将<xfa:datasets>中的所有数据存储 到一个变量中,并将其加载到 form::initialize 中的数据集。
这似乎可以很好地加载数据集,就像 cfpdform 将它们弄乱之前一样。在 loadXML() 调用之后,我可以读取数据集并获得与原始 PDF 相同的结果,其 datasets 标签中充满了 XML 数据。
form1::initialize - (JavaScript, client)
//xfa.host.messageBox("loading xml to datasets");
xfa.datasets.nodes.namedItem("LOVFile").loadXML(LOVFile_var.value,0,1);
Page1.Header.debug.rawValue = xfa.datasets.LOVFile.LOV.PreferenceLanguageList.resolveNode("PreferenceLanguage[2]").value;
问题是下来列表仍然不起作用,他们没有要显示的项目。不知何故,他们对数据集的绑定调用不会刷新?
在 loadXML() 之后还有什么我应该做的吗?bindItems的LiveCycle 引用显示“列表项和引用数据之间的链接处于活动状态。对数据的任何更改都会导致立即更新列表项。 ”
非常感谢任何帮助或指出正确的方向。
更新:
使用 azathoth 的答案,我可以使用来自新加载数据集的数据(在 loadXml() 调用之后)将项目添加到下拉列表。
var oEyeColors = xfa.datasets.LOVFile.LOV.resolveNode("EyeColorList");
var numberOfNodes = oEyeColors.nodes.length;
var thisValue = "";
for (var i=0; i < numberOfNodes ; i++){
thisValue = oEyeColors.nodes.item(i).value;
if(thisValue == null){
thisValue = "";
}
xfa.resolveNode("Page1.eyeColorDropDownList").addItem(thisValue.toString());
}
这有效,但不是我正在寻找的解决方案。必须有一种 JavaScript 方法来设置下拉列表的 bindItems。