2011-08-02 65 views
1

我創建了一個帶有生命週期的pdf表單。一個靜態的pdf。 現在我想填寫這個pdf的一些領域。 我有沒有問題的文本框,但我有一個dropdownlist的問題。 它是空的,我想填充它。使用ITextSharp填充PDF中的下拉列表

PdfReader pdfReader = new PdfReader(pdfTemplate); 
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(newFile, FileMode.Create)); 
AcroFields pdfFormFields = pdfStamper.AcroFields; 

pdfFormFields.SetField("Dep", "44"); 
pdfFormFields.SetField("grp", "0"); 
pdfFormFields.SetListOption("gardien", new string[] { "English", "German", "French", "Spanish", "Dutch" }, new string[] { "EN", "DE", "FR", "ES", "NL" }); 

前兩個SetField沒有問題,它的工作原理。但SetListOption給了我這個錯誤:

給定的關鍵是不存在的字典

你能不能幫我PLZ,我錯過了什麼?

回答

1

請參閱this thread from a couple of years ago討論如何將PDF字段與Designer/LiveCycle創建的內容混合,看起來像表單字段。

基本上iText(因此iTextSharp)只支持SetField從LiveCycle創建的字段。

也就是說,解決方法是使用字段的鍵名而不是名稱。您可以通過在pdfFormFields.Fields屬性上執行foreach來查找鍵名。你最終會得到類似topmostSubform[0].Page1[0].DropDownList1[0]的東西。

一旦你得到了,你可以再做:

pdfFormFields.SetListOption("topmostSubform[0].Page1[0].DropDownList1[0]", new string[] { "English", "German", "French", "Spanish", "Dutch" }, new string[] { "EN", "DE", "FR", "ES", "NL" }); 

非常重要!您在此處設置的值將適用於Adobe Reader/Acrobat,但LiveCycle將忽略這些值。如果你在LiveCycle中製作PDF,但沒有理由再次打開它,那麼你會發現。如果您完全依賴XFA,它也可能會崩潰。

+0

謝謝你的幫助克里斯,這是非常清楚的。 – user874854

+0

謝謝你的幫助克里斯,這是非常清楚的。我嘗試了你的advuce:使用鍵名「formulaire [0]。#subform [0] .gardien [0]」,但我仍然有同樣的錯誤(關於字典...)。我認爲它發現我的領域(dropdownlist),因爲當我把一個錯誤的名字,我沒有錯誤(它當然沒有任何)。我希望這不是因爲我的下拉列表與itextsharp或類似的東西不兼容。 – user874854

+0

oups我的錯誤,它的作品!對此感到抱歉;)非常感謝你。 – user874854