Я пишу приложение C#, которое нужно будет читать как в шаблонах XFA, так и в AcroField. Из-за размера компании и количества существующих PDF-документов, которые можно подключить к приложению, не может быть и речи о том, чтобы выбрать один и использовать его.
В настоящее время я использую iTextSharp для чтения в AcroFields, но на самом деле он не сохраняет изменения. Я сделал AcroFields, используя пробную версию Acrobat Pro.
РЕДАКТИРОВАТЬ: (я удалил большую часть оригинального поста)
У меня есть обходной путь, который несколько работает, но я бы предпочел не выполнять поиск в глубину в 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;
}