我正在编写一个需要同时读取 XFA 和 AcroField 模板的 C# 应用程序。由于公司的规模以及可能与应用程序相关联的现有 PDF 文档的数量,选择一个并使用它是不可能的。
我目前正在使用 iTextSharp 读取 AcroFields,但实际上并没有保存更改。我使用 Acrobat Pro 的试用版制作了 AcroFields。
编辑:(我删除了很多原始帖子)
我有一个可行的解决方法,但我宁愿不对 XML 进行深度优先搜索。除了文本字段之外,我还没有弄清楚任何其他内容。
public List<String> getKeys(AcroFields af)
{
XfaForm xfa = af.Xfa;
List<String> Keys = new List<string>();
foreach (var field in af.Fields)
{
Keys.Add(field.Key);
}
if (xfa.XfaPresent)
{
System.Xml.XmlNode n = xfa.DatasetsNode.FirstChild;
if (n == null) return Keys;
// drill down in to the children
while (n.FirstChild != null) { n = n.FirstChild; }
// if the node is filled in data, grab the parent
if ((n.Name.ToCharArray(0, 1))[0] == '#') n = n.ParentNode;
while ((n = n.NextSibling) != null)
{
Keys.Add(n.Name);
}
}
return Keys;
}