我在PDF上有列表框。
用户将从列表框中选择多个选项。
我需要将PDF上传到数据库。
我无法使用iTextSharp从列表框中检索选定的索引? 我试过
SetListSelection("listbox", PreviousExport.ToArray) but no luck.
如何使用itextsharp从PDF上的列表框中检索用户选择的索引?
评论代码:
我使用下面的代码来加载列表框..这是来自数据库
form.SetListOption("ddlNoteStatus", strbuilderExport.ToArray, strbuilderDisplay.ToArray)
stamper.AcroFields.SetField("ddlNoteStatus", "3")
我可以从pdf中检索其他字段,这些字段不是列表框,但代码如下。但是,如果我对列表框使用相同的代码,则只显示从列表框中选择的最后一个值,但不是用户选择的所有值
stamper.AcroFields.GetField("txtDateFollow")
答案 0 :(得分:2)
而不是GetField
您要使用GetListSelection
。为安全起见,您可能希望始终致电GetFieldType
以确定您正在查看的字段类型。以下代码显示了这个:
using (var r = new PdfReader(testFile)) {
var acro = r.AcroFields;
if(acro.GetFieldType("countries") == AcroFields.FIELD_TYPE_LIST ){
Console.WriteLine(String.Join(",", acro.GetListSelection("countries").ToArray()));
}
}
我针对使用以下代码创建的PDF测试了上述代码:
var testFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.pdf");
using (var fs = new FileStream(testFile, FileMode.Create, FileAccess.Write, FileShare.None)) {
using (var doc = new Document()) {
using (var writer = PdfWriter.GetInstance(doc, fs)) {
doc.Open();
doc.Add(new Paragraph("Hello World"));
var dd = new iTextSharp.text.pdf.TextField(writer, new iTextSharp.text.Rectangle(50, 500, 200, 550), "countries");
dd.Choices = new string[] { "United States", "Canada", "France" };
dd.ChoiceExports = new string[] { "US", "CA", "FR" };
dd.Options = dd.Options | TextField.MULTISELECT;
dd.ChoiceSelections = new List<int>(new int[] { 0, 2 });
writer.AddAnnotation(dd.GetListField());
doc.Close();
}
}
}