我使用iText / iTextSharp(通过NuGet获取的iTextSharp 5.3.3)来处理XFA表单时遇到了一个非常奇怪的问题。我正在尝试填写静态XFA样式表单,但我的更改不起作用。
我拥有iText in Action的两个版本,并参考了第二版以及书中的iTextSharp代码示例转换。
背景:我有一个XFA表单,可以在我的计算机上使用Adobe Acrobat手动填写。使用iTextSharp,我可以读取Xfa XML数据并查看数据结构。我基本上正在尝试使用iText模仿它。
当我在Acrobat中添加数据并保存时,数据是这个样子的(注意:这仅是数据集的特定部分):
这是我要读取以替换现有数据的XML文件(注意:这是该文件的整个内容):
但是,当我传入替换XML文件的路径并尝试设置数据时,新文件被创建(原始副本已替换数据),没有任何错误被抛出,但数据未更新。我可以看到新文件被创建,并且我可以打开它,但文件中没有数据。
以下是用于替换数据或首次填充的代码,这是http://sourceforge.net/p/itextsharp/code/HEAD/tree/trunk/book/iTextExamplesWeb/iTextExamplesWeb/iTextInAction2Ed/Chapter08/XfaMovie.cs的一个变体。
任何帮助都将十分感激。
我拥有iText in Action的两个版本,并参考了第二版以及书中的iTextSharp代码示例转换。
背景:我有一个XFA表单,可以在我的计算机上使用Adobe Acrobat手动填写。使用iTextSharp,我可以读取Xfa XML数据并查看数据结构。我基本上正在尝试使用iText模仿它。
当我在Acrobat中添加数据并保存时,数据是这个样子的(注意:这仅是数据集的特定部分):
![enter image description here](https://istack.dev59.com/TFZEu.webp)
![enter image description here](https://istack.dev59.com/t2Q0H.webp)
以下是用于替换数据或首次填充的代码,这是http://sourceforge.net/p/itextsharp/code/HEAD/tree/trunk/book/iTextExamplesWeb/iTextExamplesWeb/iTextInAction2Ed/Chapter08/XfaMovie.cs的一个变体。
public void Generate(string sourceFilePath, string destinationtFilePath, string replacementXmlFilePath)
{
PdfReader pdfReader = new PdfReader(sourceFilePath);
using (MemoryStream ms = new MemoryStream())
{
using (PdfStamper stamper = new PdfStamper(pdfReader, ms))
{
XfaForm xfaForm = new XfaForm(pdfReader);
XmlDocument doc = new XmlDocument();
doc.Load(replacementXmlFilePath);
xfaForm.DomDocument = doc;
xfaForm.Changed = true;
XfaForm.SetXfa(xfaForm, stamper.Reader, stamper.Writer);
}
var bytes = ms.ToArray();
File.WriteAllBytes(destinationtFilePath, bytes);
}
}
任何帮助都将十分感激。