无法遍历iTextSharp中的字段

时间:2017-05-22 18:56:55

标签: c# itext

我有一张带有表格的PDF,其价值可以使用iTextSharp 5.5.11的PDFReader.AcroFields.GetField()方法访问。但我无法弄清楚如何迭代字段并打印键和值。我试过这个问题中提到的方法: How do I enumerate all the fields in a PDF file in ITextSharp

......但没有骰子。我也尝试过使用枚举器:

using System; using System.IO; using System.Collections; using System.Collections.Generic; using iTextSharp.text; using iTextSharp.text.pdf; class DoStuff { static void Main(string[] args) { string fileName = args[0]; PdfReader reader = new PdfReader(fileName); AcroFields pdfFormFields = reader.AcroFields; var enumerator = pdfFormFields.Fields.GetEnumerator(); Console.WriteLine(pdfFormFields.Fields.GetType()); // So it's a 'LinkedDictionary', how do I iterate through that and get keys and values? while (enumerator.MoveNext()) // Evidently not like this... { Console.WriteLine("There are fields in the document, but this never prints"); } } }

......但这似乎也不起作用。目前的做法是什么?

1 个答案:

答案 0 :(得分:1)

你需要这样的东西:

foreach (string key in pdfFormFields.Fields.Keys)
{
    // key is the name of the field
}

如果这不显示任何字段,您不会看到具有AcroForm技术的表单,您有XFA表单,并且这样的表单完全不同。见How to get a list of the fields in an XFA form?

更新:如果您怀疑该表单是纯XFA表单,请尝试以下代码:

XfaForm xfa = pdfFormFields.Xfa;

并检查xfa.XfaPresent的值。如果是true,则您有XFA表单;如果它是假的,你可能会遇到一个破碎的形式。我已经看到了在页面词典中引用了窗口小部件注释的表单,但没有在fields数组中引用那些小部件注释。曾经有一个工具创建这样的破碎形式(我忘了哪个工具)。在任何情况下:对于人类用户来说,它看起来好像PDF中有交互式字段,但对于机器来说,那些不是真实的字段。见ItextSharp - Acrofields are empty