当字段名称包含使用iTextSharp的句点时,如何重命名PDF表单字段

时间:2017-05-13 12:31:05

标签: c# forms pdf itext field

我使用iTextSharp重命名PDF表单字段。旧字段名称和新替换名称将在文本框中输入(以逗号分隔)。然后我的代码循环遍历每一行,抓取旧字段名称,在PDF中查找字段并将其重命名为新字段。最后,从旧PDF创建新PDF,新PDF中的所有字段都将具有新名称。

我的问题是我似乎无法重命名字段名称中包含句点的PDF字段(例如First.Name)。有没有办法使用iTextSharp重命名这些PDF字段?我到处寻找,无法找到明确的答案或代码示例。

以下是我目前使用的代码:

x

1 个答案:

答案 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方法仅支持更改最终字段树元素本身的本地名称。

这是明智的。表单字段可以从其父级继承许多属性。因此,如果重命名字段,是否希望结果字段继承新父字段?或者是否应将所有继承的属性显式添加到节点?或者只有那些与各自新的继承信息不同的人?或者你还有另一个想法吗?

相关问题