我正在制作一个允许您填写表单字段的应用程序。 我想以编程方式收集字段名称及其标签。 我知道如何获得所有的AcroFields,但我似乎无法找到获取相关标签的方法。
通过iTextSharp生成的原始XFA表单,我可以看出每个字段都被描述引用。但是订单搞砸了,所以我无法手动解析PDF字段的XFA / XML。
有什么想法吗?
答案 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);
}
}