如何使用iTextSharp获得PDF AcroField的字段标签
本文关键字:字段 标签 AcroField PDF 何使用 iTextSharp 获得 | 更新日期: 2023-09-27 17:49:14
我正在制作一个允许您填写表单字段的应用程序。我想以编程方式收集字段名称及其标签。我知道如何获得所有的AcroFields,但我似乎找不到一种方法来获得相关的标签。
通过查看iTextSharp生成的原始XFA表单,我可以看出每个字段都由描述引用。但是顺序是混乱的,所以我不能手动解析PDF字段的XFA/XML。
任何想法?
示例表单我正在使用
如果你的'label'是指quickinfo/tooltip/备用字段名,那么下面的代码可能会帮助你。在PDF中有XFA表单和老式跨表单。要检索acroform名称和标签,可以使用以下代码。这是java代码,但c#应该非常相似…
AcroFields acroFields = reader.getAcroFields();
Map<String, AcroFields.Item> fields = acroFields.getFields();
Iterator<Entry<String, Item>> it = fields.entrySet().iterator();
while (it.hasNext()) {
Entry<String, Item> entry = it.next();
//name of the field
String fieldName = entry.getKey();
PdfDictionary d = entry.getValue().getMerged(0);
PdfString quickInfo = d.getAsString(PdfName.TU);
if(quickInfo==null){
quickInfo= new PdfString("");
}
//Field description AKA quickinfo AKA alternate field name
String alternateFieldName = quickInfo.toString();
}
的例子有:字段名= feff004c0069006e00650031005f004500780070006c0061006e006100740069006f006e005b0030005d备选字段名:第6部分。附加信息。
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Collections;
protected void Page_Load(object sender, EventArgs e)
{
PdfReader pdfReader = new PdfReader(Request.MapPath("~/editble.pdf"));
// field names available in the subject PDF
StringBuilder sb = new StringBuilder();
foreach (DictionaryEntry de in pdfReader.AcroFields.Fields)
{
sb.Append(de.Key.ToString() + Environment.NewLine);
}
}