好吧,我必须用C#编程式地填写XFA PDF。我已经能够成功提取PDF的XML结构。但是,我遇到了使用AcroFields.Xfa.FillXfaForm(sourceXML)调用的问题。使用iText编辑XFA PDF(仅编辑节点内的字段)
基本上发生了什么是这样的:我正在采取整个XML树,编辑XML中的字段,然后尝试使用新的XML编辑表单字段。我最终得到了一个没有添加新输入的所有AcroForm字段的PDF。但是,当我解析此编辑的PDF并提取XML树时,我发现我的编辑已保存。
此特定XFA PDF的安全设置允许编辑表单域,但是我被迫使用PdfReader.unethicalreading = true;与我目前的设置(这就是为什么我相信表单域被剥离)。我相信XFA PDF将我的XML编辑完整地编辑为文档本身的格式。
这是到目前为止我的代码:
命名空间ConsoleApplication2 { 类节目 {
static void Main(string[] args)
{
System.IO.StreamWriter file = new System.IO.StreamWriter(@"E:\XMLOutPut\outPutTest.xml");
file.WriteLine(ReadFileNames());
file.Close();
using (FileStream existingPdf = new FileStream(@"E:\ORIGINAL.pdf", FileMode.Open))
{
using (PdfReader pdfReader = new PdfReader(existingPdf))
{
using (FileStream sourceXML = new FileStream(@"E:\XMLOutPut\outPutTest.xml", FileMode.Open))
{
using (FileStream targetPdf = new FileStream(@"E:\ORIGINAL.pdf", FileMode.Open))
{
PdfReader.unethicalreading = true;
PdfStamper stamper = new PdfStamper(pdfReader, targetPdf,'\0', true);
stamper.AcroFields.Xfa.FillXfaForm(sourceXML);
stamper.Close();
}
}
}
}
}
public static string ReadFileNames()
{
string SRC = @"E:\ORIGINAL.pdf";
using (PdfReader reader = new PdfReader(SRC))
{
return ReadXFA(reader);
}
}
public static string ReadXFA(PdfReader reader)
{
XfaForm xfa = new XfaForm(reader);
XmlDocument document = xfa.DomDocument;
reader.Close();
if (!string.IsNullOrEmpty(document.DocumentElement.NamespaceURI))
{
document.DocumentElement.SetAttribute("xmlns", "");
XmlDocument newDoc = new XmlDocument();
newDoc.LoadXml(document.OuterXml);
document = newDoc;
}
var sb = new StringBuilder(4000);
var Xsettings = new XmlWriterSettings() { Indent = true };
using (var wrtier = XmlWriter.Create(sb, Xsettings))
{
document.WriteTo(wrtier);
}
return sb.ToString();
}
}
}
我开始相信,我必须以某种方式通过XML迭代并拔出我希望编辑的许多字段并以此方式执行?
任何帮助将不胜感激。
亲切的问候。