无法遍历 iTextSharp 中的字段
Posted
技术标签:
【中文标题】无法遍历 iTextSharp 中的字段【英文标题】:Cannot iterate through fields in iTextSharp 【发布时间】:2017-05-22 18:56:55 【问题描述】:我有一个带有表单的 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");
...但这似乎也不起作用。目前的方法是什么?
【问题讨论】:
看起来在this 线程中你有你需要的答案。 【参考方案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 表格;如果它是错误的,您可能会遇到损坏的表格。我已经看到在页面字典中有对小部件注释的引用的表单,但在字段数组中没有对这些小部件注释的引用。曾经有一个工具可以创建像这样的破碎表格(我忘记了哪个工具)。在任何情况下:对于人类用户来说,PDF 中似乎存在交互字段,但对于机器来说,这些不是真正的字段。见ItextSharp - Acrofields are empty
【讨论】:
好吧,foreach 循环什么也没显示,所以我猜它是 XFA。感谢您的信息。 我记得还有另一种可能。我已经更新了我的答案,提供了一个与您有同样问题的人提出的问题的链接。 谢谢。 XfaPresent 是真的,这样就解开了谜团。我查看了您发送的第一个链接,看来我必须深入研究 Xml...以上是关于无法遍历 iTextSharp 中的字段的主要内容,如果未能解决你的问题,请参考以下文章
使用 iTextSharp 添加水印文本时,PAC 工具中出现 iText 7 警告