Заполните раскрывающийся список в PDF с помощью ITextSharp

Я создал pdf-форму с livecycle. статический pdf. теперь я хочу заполнить некоторые поля этого 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 дает мне эту ошибку:

Данного ключа не было в словаре

Можете ли вы помочь мне, плз, я что-то пропустил?


person user874854    schedule 02.08.2011    source источник


Ответы (1)


См. эту тему пару лет назад в котором говорится о смешивании полей PDF с тем, что создает Designer/LiveCycle, что выглядит как поля формы.

В основном iText (и, следовательно, iTextSharp) поддерживает только SetField для полей, созданных с помощью LiveCycle.

Тем не менее, обходной путь заключается в использовании ключевого имени поля вместо его имени. Вы можете найти имя ключа, выполнив foreach для свойства pdfFormFields.Fields. Вы получите что-то вроде 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. Если вы создаете PDF-файл из LiveCycle, но у вас нет причин когда-либо открывать его снова, тогда вы найдете. Если вы вообще полагаетесь на XFA, он тоже может сломаться.

person Chris Haas    schedule 02.08.2011
comment
Спасибо за вашу помощь Крис, это абсолютно ясно. Я попробовал то, что вы посоветовали: использовать формуляр имени ключа [0].#subform[0].gardien[0], но у меня все еще есть та же ошибка (о словаре...). Я думаю, что он находит мое поле (раскрывающийся список), потому что, когда я ввожу неправильное имя, у меня нет ошибки (конечно, он ничего не делает). Надеюсь, это не потому, что мой выпадающий список несовместим с itextsharp или чем-то в этом роде. - person user874854; 03.08.2011
comment
упс моя ошибка это работает! извините за это ;) большое спасибо. - person user874854; 03.08.2011