我在iText / iTextSharp(通过NuGet的iTextSharp 5.3.3)中使用XFA Forms有一个非常奇怪的问题 . 我正在尝试填写静态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的变体
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);
}
}
任何帮助将非常感谢 .
2 回答
我赞成你的答案,因为它很高兴我对演示的引用让你再看看你的代码),但是现在我再看看你原来的代码,我认为最好使用book example:
如您所见,没有必要替换整个XFA XML . 如果使用
FillXfaForm
方法,则数据就足够了 .注意:对于示例的C#版本,请参阅http://tinyurl.com/iiacsCH08(对于其他章节的示例,将08更改为01到16之间的数字) .
我发现了这个问题 . 替换的DomDocument需要是新文档的整个合并XML,而不仅仅是数据或数据集部分 .