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

Posted

技术标签:

【中文标题】如何使用 itextsharp 从 PDF 的列表框中检索用户选择的索引?【英文标题】:How to retrieve user selected indices from listbox on PDF using itextsharp? 【发布时间】:2014-04-25 16:44:31 【问题描述】:

我在 PDF 上有列表框。

用户将从列表框中选择多个选项。

我需要上传 PDF 到数据库。

我无法使用 iTextSharp 从列表框中检索选定的索引? 我试过了

SetListSelection("listbox", PreviousExport.ToArray) but no luck.

来自 cmets 的代码:

我正在使用下面的代码来加载列表框..这是来自数据库

form.SetListOption("ddlNoteStatus", strbuilderExport.ToArray, strbuilderDisplay.ToArray)
stamper.AcroFields.SetField("ddlNoteStatus", "3")

我可以使用以下代码从 pdf 中检索不属于列表框的其他字段。但是,如果我对列表框使用相同的代码,则仅显示从列表框中选择的最后一个值,而不是用户选择的所有值

stamper.AcroFields.GetField("txtDateFollow")

【问题讨论】:

您说您无法检索,但您还使用了用于设置值的set 方法。你尝试过这样的事情吗? ***.com/a/3367973/231316 我正在使用下面的代码来加载列表框..这是来自数据库 form.SetListOption("ddlNoteStatus", strbuilderExport.ToArray, strbuilderDisplay.ToArray) stamper.AcroFields.SetField("ddlNoteStatus", "3") 我可以从 pdf 中检索不属于列表框的其他字段,代码如下。但是,如果我对列表框使用相同的代码,则仅显示从列表框中选择的最后一个值......但不是用户选择的所有值.... stamper.AcroFields.GetField("txtDateFollow") 【参考方案1】:

您想使用GetListSelection 而不是GetField。为了安全起见,您可能希望始终调用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();
        
    

【讨论】:

抱歉回复晚了。非常感谢。工作得很好。你节省了很多时间。需要再运行一次测试。使用 acrobat 11 阅读器对 PDF 进行签名后,、、、、、、、、、是否可以检索字段。在 PDF 展平后。 嗨,克里斯,我尝试在使用 acrobat 11.0 签名选项签名后从 PDF 中获取信息。 但pdf签名后无法检索信息。我的要求,,,,在用户签署文件后,需要从 PDF 中检索信息。有没有读取数据的选项.... ChoiceSelections 也是我能找到的在代码隐藏中设置组合框查找值的唯一方法。

以上是关于如何使用 itextsharp 从 PDF 的列表框中检索用户选择的索引?的主要内容,如果未能解决你的问题,请参考以下文章

在 iTextSharp 中使用 CSS 从 HTML 渲染 PDF

使用itextsharp从pdf中提取文本返回空字符串

使用itextsharp.dll生成PDF [关闭]

样式未使用ITextSharp在PDF中实现[复制]

使用 iTextSharp 创建 PDF 时放置页码

如何从左下角到左上角更改pdf页面中文本的坐标