我使用iTextSharp重命名PDF表单字段。旧字段名称和新替换名称将在文本框中输入(以逗号分隔)。然后我的代码循环遍历每一行,抓取旧字段名称,在PDF中查找字段并将其重命名为新字段。最后,从旧PDF创建新PDF,新PDF中的所有字段都将具有新名称。
我的问题是我似乎无法重命名字段名称中包含句点的PDF字段(例如First.Name)。有没有办法使用iTextSharp重命名这些PDF字段?我到处寻找,无法找到明确的答案或代码示例。
以下是我目前使用的代码:
x
答案 0 :(得分:1)
这在iText(夏普)源代码中有描述:
/**
* Renames a field. Only the last part of the name can be renamed. For example,
* if the original field is "ab.cd.ef" only the "ef" part can be renamed.
* @param oldName the old field name
* @param newName the new field name
* @return <CODE>true</CODE> if the renaming was successful, <CODE>false</CODE>
* otherwise
*/
virtual public bool RenameField(String oldName, String newName)
因此,使用此方法,您可以将 First.Name 重命名为 First.NameOrEmpty 或类似名称,但不能重命名为 EmptyOrFirst.Name 。
背景是PDF中的表单字段不仅仅被安排为具有全名的对象列表,而是被安排为一个树,其中节点的全名是其祖先和节点的部分名称的串联。本身用点分开。
因此,更改除最后一个点之后的部分(或更改该部分但引入新点)之外的任何内容实际上意味着将树中的字段移动到另一个父节点,该父节点可能会也可能不会必须在此过程中创建。
另一方面,RenameField
方法仅支持更改最终字段树元素本身的本地名称。
这是明智的。表单字段可以从其父级继承许多属性。因此,如果重命名字段,是否希望结果字段继承新父字段?或者是否应将所有继承的属性显式添加到节点?或者只有那些与各自新的继承信息不同的人?或者你还有另一个想法吗?