我需要预先填写动态PDF的字段,以便我的用户可以对其进行编辑并提交回来。
我正在使用Adobe ColdFusion CFPDFFORM标记,该标记可以将XML数据加载到PDF中并生成新的填充PDF。不幸的是,它还会清除< xfa:datasets> 标记,它会完全清空它!因此,绑定到数据集的所有下拉列表都不起作用。这是绑定其中一个的代码:
<bindItems ref="xfa.datasets.LOVFile.LOV.PreferenceLanguageList.PreferenceLanguage[*]" labelRef="$" valueRef="lic"/>
由于我无法控制CFPDFFORM标签的工作方式,因此我提出了一种解决方法。使用LiveCycle Designer进行编码,我将&lt; xfa:datasets&gt; 中的任何数据存储到变量中,然后将其加载到form :: initialize的数据集中。
这似乎可以很好地加载数据集,就像在cfpdform搞砸之前一样。在调用loadXML()之后,我可以读取数据集并获得与原始PDF相同的结果,其数据集标记中包含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方法来设置下拉列表的bindItem。
答案 0 :(得分:2)
我使用此代码执行您指定的操作:
xfa.datasets.loadXML(LOVFile_var.rawValue, false, false);
xfa.datasets.saveXML();
var yourXML = xfa.datasets.resolveNode("yourXMLRootNodeName");
var numberOfNodes = yourXML.nodes.length;
for (var i=0; i < numberOfNodes ; i++)
yourDropDown.addItem(yourXML.nodes.item(i).nodes.item(1).value); // this can change according to what you retrieve in your xml
告诉我它是否适合你
答案 1 :(得分:0)
也许这就是你要找的东西?
使用LiveCycle ES2.5从后端数据源预填充动态PDF表单中的下拉列表
http://www.adobe.com/devnet/livecycle/articles/prepopulating-dropdown-lists.html