gpt4 book ai didi

java - 无法使用 iText Java 重命名 PDF 中的表单字段

转载 作者:行者123 更新时间:2023-11-30 02:47:30 26 4
gpt4 key购买 nike

我正在尝试使用 iText 库用新名称重命名现有字段。但下面的代码没有帮助。

public static void testRenameFields() throws Exception{
String SRC = "C:\\Citi\\esign\\pdfs\\SS_Application_fields.pdf";
String DEST = "C:\\Citi\\esign\\pdfs\\abc.pdf";
PdfReader reader = new PdfReader(SRC);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(DEST));
AcroFields form = stamper.getAcroFields();
System.out.println("FieldType : "+form.getFieldType("signers[0].firstName"));
form.renameField("signers[0].firstName", "Firstname");
System.out.println("FieldType : "+form.getFieldType("Firstname"));
stamper.close();
reader.close();

}

该片段的输出是字段类型:4
字段类型:0

即使我已经重命名了该字段,它也会为我提供现有字段的输出。并且新名称未附加到该字段。

注意:FieldType 0 - 字段不存在
FieldType 4 - 文本类型字段

任何人都知道使用 iText 重命名 PDF 中的字段的任何替代方法。

请多多指教!!

最佳答案

您尝试将“signers[0].firstName”重命名为“Firstname”。使用AcroFields.renameField这是不可能的,参见。它的 JavaDoc 文档:

/**
* 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
*/
public boolean renameField(String oldName, String newName)

因此,您可以将“signers[0].firstName”重命名为“signers[0].reallyFirstName”,但直到最后的“.”为止。需要保持不变。

<小时/>

如果您想知道此限制的原因:字段实际上不一定排列为平面列表,而是排列为树,并且字段的名称是树节点名称的串联,中间用句点作为分隔符。尝试在最后一个点之前的任何位置更改字段名称可能意味着必须更改树结构,但所实现的方法只是为了简单地重命名。

关于java - 无法使用 iText Java 重命名 PDF 中的表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39722164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com