gpt4 book ai didi

c# - 如何获取 XFA 表单中的字段列表?

转载 作者:太空狗 更新时间:2023-10-29 21:09:34 25 4
gpt4 key购买 nike

我正在尝试获取 XFA 表单中所有字段的简单列表。我正在使用这段代码:

private void ListFieldNames()
{
string pdfTemplate = @"C:\Projects\iTextSharp\SReport.pdf";
MemoryStream m = new MemoryStream();

// title the form
this.Text += " - " + pdfTemplate;

// create a new PDF reader based on the PDF template document
PdfReader pdfReader = new PdfReader(pdfTemplate);
PdfStamper pdfStamper = new PdfStamper(pdfReader, m);
AcroFields formFields = pdfStamper.AcroFields;
AcroFields form = pdfReader.AcroFields;
XfaForm xfa = form.Xfa;
StringBuilder sb = new StringBuilder();
sb.Append(xfa.XfaPresent ? "XFA form" : "AcroForm");
sb.Append(Environment.NewLine);

foreach (string key in form.Fields.Keys)
{
sb.Append(key);
sb.Append(Environment.NewLine);
txtFields.Text = sb.ToString();
}

txtFields.Text = sb.ToString();
}

但我得到的只是 XFA 表单,而不是任何字段。知道我做错了什么吗?

提前致谢

最佳答案

您已经从我的书“iText in Action”的第 8 章中获取了代码示例。该代码示例的结果与我在第 273 页上写的一致:

Running Listing 8.18 with this form as resource will give you the following result:

AcroForm

如果您的问题是知道我做错了什么吗? 那么答案很简单:您停止阅读第 270 页,或者您使用了代码示例而没有阅读随附的文档。如何解决这个问题?阅读文档!

如果您的问题是为什么我得不到有关这些字段的任何信息?(这不是您的问题,但我们假设它是),答案是:您正在使用代码检索 AcroForm 字段,但您的表单不包含任何此类字段。您的表单是纯 XFA 表单,这意味着所有字段信息都存储为 XML 且仅以 XML 形式存储!

假设您现在想知道:我如何提取该 XML?那么您应该转到找到您复制/粘贴的示例的地方。

可能在这里: http://itextpdf.com/examples/iia.php?id=164

或者在这里:http://sourceforge.net/p/itextsharp/code/HEAD/tree/trunk/book/iTextExamplesWeb/iTextExamplesWeb/iTextInAction2Ed/Chapter08/XfaMovie.cs

甚至在这里:http://kuujinbo.info/iTextInAction2Ed/index.aspx?ch=Chapter08&ex=XfaMovie

此代码片段将返回完整的 XFA 流:

public string ReadXfa(PdfReader reader) {
XfaForm xfa = new XfaForm(reader);
XmlDocument doc = xfa.DomDocument;
reader.Close();

if (!string.IsNullOrEmpty(doc.DocumentElement.NamespaceURI)) {
doc.DocumentElement.SetAttribute("xmlns", "");
XmlDocument new_doc = new XmlDocument();
new_doc.LoadXml(doc.OuterXml);
doc = new_doc;
}

var sb = new StringBuilder(4000);
var Xsettings = new XmlWriterSettings() {Indent = true};
using (var writer = XmlWriter.Create(sb, Xsettings)) {
doc.WriteTo(writer);
}
return sb.ToString();
}

现在寻找 <xfa:datasets>标签;它会有一个子标签 <xfa:data> (如果表单为空,则可能为空)和一个子标签 <dd:dataDescription> . dataDescription里面标签,你会发现类似于 XSD 的东西。这就是您需要知道表单中的字段是关于什么的。

我可以继续猜测问题,例如:我如何填写这样的表格? 通过使用方法 fillXfaForm() ; 我怎样才能展平这样的表格?通过使用 XFA Worker(这是一个在 iTextSharp 之上编写的封闭源代码库),但让我们将这些问题留到另一个线程 ;-)

关于c# - 如何获取 XFA 表单中的字段列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14864669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com