Добавление списков в Pdfform с кодом C#
Я пытаюсь добавить варианты выбора в поле списка в PDF-форме через C# и библиотеку itextsharp. Но я не могу найти способ сделать это. Форма уже существует, я создал ее с помощью Acrobat. Я хотел бы, чтобы варианты выбора списка полей из PDF были такими же, как в моей программе. Поэтому я хочу создать опции в полях списка с помощью itextsharp, чтобы уменьшить объем обслуживания. Но я не могу найти, чтобы сделать это. С PDFstamper из библиотеки я могу заполнить поля из формы. И раскрась некоторые поля. Есть ли возможность добавить опции в поле списка с помощью кода C#? Было бы здорово, если бы кто-то знал ответ и показал мне способ понять это.
1 ответ
Если вы используете iText 7, это легко. Это объясняется в главе 5 учебника по началу работы с iText 7: управление существующим документом PDF
PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true);
Map<String, PdfFormField> fields = form.getFormFields();
List<PdfString> options = new ArrayList<PdfString>();
options.add(new PdfString("Any"));
options.add(new PdfString("8.30 am - 12.30 pm"));
options.add(new PdfString("12.30 pm - 4.30 pm"));
options.add(new PdfString("4.30 pm - 8.30 pm"));
options.add(new PdfString("8.30 pm - 12.30 am"));
options.add(new PdfString("12.30 am - 4.30 am"));
options.add(new PdfString("4.30 am - 8.30 am"));
PdfArray arr = new PdfArray(options);
fields.get("shift").setOptions(arr);
iText 7 в настоящее время существует только для Java; версия C# будет выпущена через 2 недели.
Если вы используете iText 5, вам нужно обратиться к главе 8 iText в действии - второе издание, более конкретно на примере ChoiceFields:
AcroFields form = stamper.getAcroFields();
form.setField("choice_1", "NL");
form.setListSelection("choice_2", new String[]{"German", "Spanish"});
String[] languages = form.getListOptionDisplay("choice_3");
String[] exportvalues = form.getListOptionExport("choice_3");
int n = languages.length;
String[] new_languages = new String[n + 2];
String[] new_exportvalues = new String[n + 2];
for (int i = 0; i < n; i++) {
new_languages[i] = languages[i];
new_exportvalues[i] = exportvalues[i];
}
new_languages[n] = "Chinese";
new_exportvalues[n] = "CN";
new_languages[n + 1] = "Japanese";
new_exportvalues[n + 1] = "JP";
form.setListOption("choice_3", new_exportvalues, new_languages);
form.setField("choice_3", "CN");
form.setField("choice_4", "Japanese");
Приведенный выше код является кодом Java, но вы также можете интерпретировать его как "псевдокод", если не хотите читать Java.
Все примеры из книги iText в действии преобразованы в C#. См. ChoiceFields.cs для полного примера iText 5.
Важно: я предполагаю, что вы создали форму с помощью Acrobat и ваша форма основана на технологии AcroForm. Если вы создали свою форму с помощью LiveCycle, у вас есть форма XFA. Код, указанный в этом ответе, не будет работать для форм XFA.