Java PDFBox:签名时引用现有签名(字段)

Java PDFBox:签名时引用现有签名(字段),java,pdfbox,Java,Pdfbox,我试图弄清楚PDFBox是否支持对现有(emtpy)签名表单字段进行签名。我检查了提供的字段,但是所有字段似乎都只添加了新字段。还有一个OP声明: “作为pdfbox,预先存在的签名字段不受pdfbox的影响 似乎无法引用它们。” 然而,这是一年前写的,似乎有一些关于签名功能的问题。 那么,有谁能告诉我,是否有可能(如果有,如何)引用现有的签名字段?或者这是有计划的 更新 我按照您的建议实现了以下功能: PDDocumentCatalog docCatalog = doc.getDocument

我试图弄清楚PDFBox是否支持对现有(emtpy)签名表单字段进行签名。我检查了提供的字段,但是所有字段似乎都只添加了新字段。还有一个OP声明:

“作为pdfbox,预先存在的签名字段不受pdfbox的影响 似乎无法引用它们。”

然而,这是一年前写的,似乎有一些关于签名功能的问题。 那么,有谁能告诉我,是否有可能(如果有,如何)引用现有的签名字段?或者这是有计划的

更新 我按照您的建议实现了以下功能:

PDDocumentCatalog docCatalog = doc.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDField field = acroForm.getField("exampleSignature");
PDSignature signature = ((PDSignatureField)field).getSignature();

但是签名总是
null
。在检查了PDF规范之后,它完全有意义,因为空签名字段从未设置签名字典。添加签名字典时,例如筛选器、内容、ByteRange等的值必须填写,但只能在签名时填写有意义的完整值…

从2.0.4开始,但已在中,可以对现有(空)签名表单字段进行签名。(即使使用即将发布的2.0.4中更新的代码示例,它也无法与2.0.3一起使用,因为库代码中有几个已修复的错误)。可以找到示例代码。示例代码中有两件事是新的:

  • visibleSignatureProperties.buildSignature()已被移动
  • 调用
    signature=findExistingSignature(文档,“Signature1”)已添加
这样做的目的是搜索名为“Signature1”的签名字段,如果找到,它将创建一个签名字典(
/V
组件)。由于此签名对象被传递给
doc.addSignature()
调用,因此PDFBox将能够检测到父字段已经存在,并且不会创建新字段


有关更多详细信息,请参见。

另一个问题有/UR3问题。我查看了签名代码(我比一年前好多了),如果您可以使用
field.getSignature()
从PDF签名字段中获取PDSignature对象,这是可能的(我还没有测试过)。你能做到吗?你能分享你的PDF吗?我按照建议实现了它,但是没有
field.getSignature()方法。代码:PDField-field=acroForm.getField(“existingSignature”);PDSignature签名=field.getSignature()
然后您必须与PDFDebugger共享PDF或亲自查看。刚刚意识到我必须转换到
((PDSignatureField)字段)。getSignature()
首先获得
getSignature()
方法。。。