シャープ記号が 2 つ含まれるフィールド名に値を設定しようとすると、iText で奇妙なエラーが発生します。問題は、元のフォーム フィールド名を制御できないことです。
これを回避する方法を知っている人はいますか?フィールドの名前を変更しようとしましたが、フィールドの名前を変更していません。
これはエラーになります
form.SetField("form1[0].#subform[8].#area[12].Line4_FirstName3[4]", "Bill");
しかし、フィールド名が似ていてもシャープ記号が 1 つしかない場合は、そうではありません。
form.SetField("form1[0].#subform[8].Line4_FirstName3[4]", "Bill");
タイプ 'System.Web.HttpUnhandledException' の例外がスローされました。---> System.Xml.XmlException: '#' 文字 (16 進値 0x23) を名前に含めることはできません。System.Xml.XmlDocument.CheckName(文字列名) で System.Xml.XmlElement..ctor(XmlName 名、ブール空、XmlDocument doc) で System.Xml.XmlDocument.CreateElement(文字列プレフィックス、文字列 localName、文字列 namespaceURI) でSystem.Xml.XmlDocument.CreateElement(文字列名) at iTextSharp.text.pdf.XfaForm.Xml2SomDatasets.InsertNode(XmlNode n, String shortName) at iTextSharp.text.pdf.AcroFields.SetField(文字列名, 文字列値, 文字列表示) iTextSharp.text.pdf.AcroFields.SetField (文字列名、文字列値) で
これは iText 4.1.2.0 のものです。
フィールドの名前を変更して、「#area[12]」周辺の 2 番目のポンド記号タイプ テストを削除しようとすると、名前が変更されません。
PdfReader reader2 = new PdfReader(pdfTemplate);
using (FileStream fs = new FileStream(TemporaryFile, FileMode.Create)) {
PdfStamper stamper = new PdfStamper(reader2, fs);
AcroFields pdfForm = stamper.AcroFields;
//Dim de As New DictionaryEntry
foreach (DictionaryEntry de in pdfForm.Fields) {
pdfForm.RenameField(de.Key.ToString(), Guid.NewGuid().ToString("N"));
}
stamper.Close();
}