如何使用itextsharp从PDF上的列表框中检索用户选择的索引?

时间:2014-04-25 16:44:31

标签: pdf listbox itextsharp

我在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")

1 个答案:

答案 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();
        }
    }
}