如何使用 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 的列表框中检索用户选择的索引?的主要内容,如果未能解决你的问题,请参考以下文章