Okだから、C#を使用してXFA PDFをプログラムで記入する必要があります。 PDFのXML構造を正常に抽出できました。しかし、私はAcroFields.Xfa.FillXfaForm(sourceXML)呼び出しを使用して問題に取り掛かりました。iTextでXFA PDFを編集する(ノード内のフィールドのみを編集する)
私はENTIRE XMLツリーをとり、XML内のフィールドを編集してから、新しいXMLでフォームフィールドを編集しようとしています。私はすべてのAcroFormフィールドを削除し、新しい入力を追加しなくて済むようになります。しかし、この編集された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を反復処理する必要があることを信じるように始めていますしかし、私が編集したいと思う多くのフィールドを引き出し、そのようにしますか?
ご協力いただければ幸いです。
大切にしてください。