PDFBox标识特定页面和功能建议

时间:2016-06-02 20:02:43

标签: java digital-signature pdfbox

我正在寻找一种解决文档上多个签名的方法,所以我有几个问题,我可以做什么,不能做什么。

首先,由于可以将来自不同人的多个签名添加到文档中,因此如果需要,由于美观和文档打印,签名的位置是重要的。话虽如此,我想知道一种方法来处理这个问题。我在想的是在文档的末尾添加/附加一个额外的页面并为其分配一些标识符,例如" doc_signatures",所以当第二个人打开文档进行签名时,它会检测到它有一个" doc_signatures"页面创建,只需添加签名并使用PDFBox中的增量选项保存文档。这是一个好方法吗?如果是,是否有办法识别" doc_signatures"页面,所以我不会再次追加它。

此外,我可以添加类似的签名字段到#34; doc_signatures"页面,每个位置都有一个位置,所以当我打开PDF时,我发现它有" doc_signatures"已经创建并且已经在该页面上的#34; Field 1"(有自己的X,Y坐标)上签名,所以将第二个签名放在" Field 2" on" doc_signatures"页面和"字段3"对于第三个签名,还有某些类型的文件签名数量限制?

如果这是一种可以接受的方法,我将不胜感激,如果不是,我是否有任何建议可以做到这一点?我将不胜感激任何其他可以使用PDFBox实现的方法或逻辑。关心每个人。

1 个答案:

答案 0 :(得分:0)

当您提出这个问题(一般不是PDFBox)时,我会先回答类似的问题。 PDFBox的功能足以实现相关概念。

  

首先,由于可以将来自不同人的多个签名添加到文档中,因此如果需要,由于美观和文档打印,签名的位置是重要的。话虽如此,我想知道一种方法来处理这个问题。我在想的是在文档的末尾添加/附加一个额外的页面并为其分配一些标识符,例如" doc_signatures",所以当第二个人打开文档进行签名时,它会检测到它有一个" doc_signatures"页面创建,只需添加签名并使用PDFBox中的增量选项保存文档。这是一个好方法吗?

这是否是一种好方法取决于要签署的文件的性质以及您对文件预签署工作流程的影响。

纸质文件通常具有专门职位,用于签署具有特定角色的人员。如果您购买的东西,并作为销售合同确认收据的一部分,您的签名必须明确签署收据部分,而供应商的签名不需要。

在数字PDF签名中,您也可以通过签名字段值的原因条目清楚地表明这一点,但是由于您还想打印文档,这可能还不够:在那里打印没有签名字段值,只有它的外观。

在这种情况下,签署的文件应该已经准备好,在文件中适当地放置了空的签名字段并命名或以其他方式标记以表明该人签名的角色。顺便说一下,这也是可互操作的方式,空签名字段可以很容易地签名,例如, Adobe Reader。

如果这是不可能的,并且如果用于签署文档的软件具有GUI,则该GUI可以为每个签名者提供能够根据其签名原因和角色恰当地定位其签名的能力。

否则,您的额外签名页面方法将是首选方法。

如果所有签名者都具有相同的角色,或者至少对于任何签名角色都没有特殊的适当位置,那么您的额外页面方法可能不仅仅是最后的手段。它甚至看起来像是公证行为产生的文件。

  

如果是,有没有办法识别" doc_signatures"页面,所以我不会再次追加它。

对于符合当前ISO 32000-1标准的PDF,您可以使用页面字典执行此操作:

  

页面字典可用于保存符合私有条件的产品数据。数据可能是   通过页面对象或表单字典中的可选 PieceInfo 条目与页面或表单XObject相关联。

     

ISO 32000-1的第14.5节)

看起来这些片段词典将在即将推出的ISO 32000-2中弃用。因此,更加面向未来的方法是为您注册开发人员前缀并使用您自己的密钥进行该项工作:

  

开发者   前缀应用于标识使用头等名称(见下文)的PDF的扩展名   供公众使用。

     

ISO 32000-1附件E)

这些自定义密钥似乎在ISO 32000-2中已弃用。

  

此外,我可以添加类似的签名字段到#34; doc_signatures"页面,每个位置都有一个位置,所以当我打开PDF时,我发现它有" doc_signatures"已经创建并且已经在该页面上的#34; Field 1"(有自己的X,Y坐标)上签名,所以将第二个签名放在" Field 2" on" doc_signatures"页面和"字段3"对于第三个签名,还有某些类型的文件签名数量的限制?

您可以轻松检查额外页面上的注释,尤其是确定其位置和范围。因此,您可以根据自己的喜好安排额外的签名。或者,您可以在创建时在该额外页面上准备固定数量的空签名字段,一次性安排签名。

以上所有内容只有在之前未签署源文档的情况下才有可能!如果它已经签名,则添加新页面通常被视为不允许更改文档,从而有效地使第一个签名无效。有关已签名文档的允许和不允许更改,请参阅this answer

  

让我们说每种文档类型都有特定数量的签名,例如销售文档,带有卖家和买家签名,因此方法是将签名字段添加到文档中,然后将签名放在这些字段上。我是对的吗?

正是我所建议的:如果您事先知道签名者的数量和角色,请为他们准备空签名字段。在这种情况下,您甚至不必标记签名页面等。

  

现在,抱歉打扰你,使用PDFBox,我能够创建签名字段并为这些字段添加签名吗?是否有任何示例代码?

PDFBox都可以,但特别是在现有的空签名字段中添加签名可能需要一些自己的编码。