使用 C# 代码将列表选项添加到 Pdfform

Adding listchoices to Pdfform with c# code

我正在尝试通过 C# 和 itextsharp 库向 pdf 表单中的列表字段添加选项。但我找不到办法做到这一点。 表格已经存在,我用 Acrobat 创建了它。我希望 PDF 中的 Listfield 选择与我的程序中的相同。 因此我想通过 itextsharp 在列表字段中创建选项以减少维护。 但我无法找到办法做到这一点。使用库中的 PDFstamper,我可以填写表单中的字段。并为一些字段着色。 是否可以通过 c# 代码向列表字段添加选项? 如果有人知道答案并向我展示实现这一点的方法,那就太好了。

如果您使用的是 iText 7,这很容易。 iText 7 jump-start tutorial: Manipulating an existing PDF document

的第 5 章对此进行了解释
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,那么您需要参考Chapter 8 of iText in Action - Second Edition, more specifically at the 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.

也可以解释成"pseudo code"

iText in Action 书中的所有示例都已转换为 C#。有关完整的 iText 5 示例,请参阅 ChoiceFields.cs

重要提示:我假设您已经使用 Acrobat 创建了表单,并且您的表单基于 AcroForm 技术。如果您使用 LiveCycle 创建了表单,那么您就有了一个 XFA 表单。此答案中共享的代码不适用于 XFA 表单。