我正在尝试通过 C# 和 itextsharp 库将选项添加到 pdf 表单中的列表字段。但我找不到办法做到这一点。该表单已经存在,我使用 Acrobat 创建了它。我希望 PDF 中的 Listfield 选项与我的程序中的相同。因此,我想通过 itextsharp 在列表字段中创建选项以减少维护。但我找不到这样做。使用图书馆中的 PDFstamper,我可以填写表格中的字段。并为某些字段着色。是否有可能通过 c# 代码向列表字段添加选项?如果有人知道答案并向我展示实现这一点的方法,那就太好了。
问问题
282 次
1 回答
0
如果您使用的是 iText 7,这很容易。这在iText 7 快速入门教程的第 5 章中进行了解释:操作现有的 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,那么您需要查阅iText in Action - Second Edition 的第 8 章,更具体地说,请参阅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 in Action 书中的所有示例都转换为 C#。有关完整的 iText 5 示例,请参阅ChoiceFields.cs。
重要提示:我假设您已使用 Acrobat 创建了表单,并且您的表单基于 AcroForm 技术。如果您使用 LiveCycle 创建了表单,那么您就有了一个 XFA 表单。此答案中共享的代码不适用于 XFA 表单。
于 2016-05-24T07:37:23.047 回答