好吧,我必須用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迭代並拔出我希望編輯的許多字段並以此方式執行?
任何幫助將不勝感激。
親切的問候。