重命名复选框字段与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"。

那是更多的工作。我不建议这样做,因为这是一个容易出错的操作。

重命名复选框字段与iTextSharp