如何使用iTextSharp获得PDF AcroField的字段标签

本文关键字:字段 标签 AcroField PDF 何使用 iTextSharp 获得 | 更新日期: 2023-09-27 17:49:14

我正在制作一个允许您填写表单字段的应用程序。我想以编程方式收集字段名称及其标签。我知道如何获得所有的AcroFields,但我似乎找不到一种方法来获得相关的标签。

通过查看iTextSharp生成的原始XFA表单,我可以看出每个字段都由描述引用。但是顺序是混乱的,所以我不能手动解析PDF字段的XFA/XML。

任何想法?

示例表单我正在使用

如何使用iTextSharp获得PDF AcroField的字段标签

如果你的'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);
        }
    }