2011-07-27 34 views
1

我需要預先填充動態PDF的字段,以便我的用戶可以編輯它並提交回來。如何在加載動態PDF表單(LiveCycle)時將XML加載到數據集中?

我正在使用Adobe ColdFusion CFPDFFORM標籤,它可以將XML數據加載到PDF中並製作新的填充PDF。不幸的是,它也清除< xfa:數據集>標記,它完全清空它!因此所有綁定到數據集的下拉列表都不起作用。這是綁定其中一個的代碼:

<bindItems ref="xfa.datasets.LOVFile.LOV.PreferenceLanguageList.PreferenceLanguage[*]" labelRef="$" valueRef="lic"/> 

由於我無法控制CFPDFFORM標籤的工作方式,因此我提出了一種解決方法。使用LiveCycle Designer進行編碼,我將< xfa:數據集>中的任何數據存儲到變量中,並將其加載到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參考寫着「列表項和引用的數據之間的聯繫是有效的。對數據的任何變化導致立即更新列表項。

任何幫助或指向正確的方向非常感謝。

UPDATE:

使用阿撒託斯的答案,我可以添加項目使用新加載的數據集數據的下拉列表(之後的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。

回答

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 

告訴我,如果它的工作對你

+0

THX這有助於一定能在動態PDF表單下拉列表從後端數據源。但我想保留它作爲最後的手段,因爲表單中有很多下拉列表,有些會在用戶填寫表單時發生變化。我不得不做一些改變才能使它工作。我更新了這篇文章。 – Seeker

+0

我仍然在尋找一種在數據集更新後將數據集綁定到下拉列表的方法。 – Seeker

+0

您可以使用一個腳本對象,以便它將填充任何下拉列表中的某個數據集,如下所示: 'function populateDropDown(dropdown,datasetName)'' – azathoth

相關問題