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

时间:2015-05-15 21:13:58

标签: c# pdf itextsharp itext

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

通过iTextSharp生成的原始XFA表单,我可以看出每个字段都被描述引用。但是订单搞砸了,所以我无法手动解析PDF字段的XFA / XML。

有什么想法吗?

Example form I'm working with

2 个答案:

答案 0 :(得分:2)

如果通过'标签'你的意思是quickinfo / tooltip / alternate字段名称,那么下面的代码可能对你有帮助。在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部分。附加信息。 1.额外的解释空间

答案 1 :(得分:0)

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);
        }

    }