重命名复选框字段与iTextSharp
本文关键字:iTextSharp 字段 复选框 重命名 | 更新日期: 2023-09-27 18:09:51
我正在尝试重命名文本中的字段。我可以成功地重命名文本字段,但我得到错误重命名复选框字段。下面是到目前为止的代码:
try {
pdfReader = new PdfReader(s_pdfread);
} catch (Exception ex) {
Console.WriteLine("Can't create Filestream from " + s_pdfread);
Console.WriteLine(ex.Message);
ShowHelp();
Environment.Exit(-1);
}
List <renameJob> jobsToDo = new List<renameJob> ();
try {
using (FileStream fs = new FileStream(s_pdfwrite, FileMode.Create)) {
PdfStamper stamper = new PdfStamper(pdfReader, fs);
AcroFields fields = stamper.AcroFields;
foreach (var field in stamper.AcroFields.Fields) {
Console.WriteLine("fieldKeySRC: " + field.Key);
string newFieldname = field.Key.Replace(s_searchFor, s_replaceWith);
newFieldname = newFieldname.Replace(".", "");
// special name for checkbox
/*switch (stamper.AcroFields.GetFieldType(field.Key)) {
case AcroFields.FIELD_TYPE_CHECKBOX:
newFieldname = newFieldname + ".0";
break;
} planned for future. In finaly version i need to add this .0 */
if (field.Key != newFieldname) {
renameJob job = new renameJob();
job.oldName = field.Key;
job.newName = newFieldname;
jobsToDo.Add(job);
}
}
foreach (renameJob job in jobsToDo) {
if (fields.RenameField(job.oldName, job.newName) == true) {
Console.WriteLine("renameField: " + job.oldName + " to " + job.newName);
}
else {
Console.WriteLine("!!! failed: renameField: " + job.oldName + " to " + job.newName);
}
}
stamper.Close();
为什么复选框失败而文本框正常工作....div ?
正如mkl解释的那样,字段名中的"。"不是名称的一部分,它是用来指示层次结构的。
假设您有一个名为"parent"的父字段,有两个孩子"kid1"answers"kid2"。在本例中,子字段的完全限定名是"parent"。
使用iText,您可以重命名字段,但不能更改层次结构。例如:您可以将全限定名"mybox"更改为"hisbox",您可以将全限定名更改为"parent"。孩子"变成"父母。"Child1"answers"parent"。
没关系如果这些字段是文本字段,复选框字段,或任何其他类型的字段!
换句话说:你的问题是错误的!您遇到的问题是,您没有尝试重命名字段。相反,你试图改变"父母"。Kid1"分为"parentkid1"answers"parent"。Kid2"变成"parentkid2"。这和重命名不一样!这就是消除等级制度,把父母和两个孩子变成两个没有父母的孩子!您不能使用重命名函数来执行此操作。
如果你真的想要抛弃层次结构,你需要添加两个新的字段"parentkid1"answers"parentkid2"来复制"parent "的属性。Kid1"answers"parent.kid2"。一旦你有了这些副本,你需要删除"parent", "kid1"answers"kid2"。
那是更多的工作。我不建议这样做,因为这是一个容易出错的操作。