使用 PDFBox 验证电子签名

Verify Electronic Signatures with PDFBox

我的公司已请求 Java Web 服务实现从 PDF 表单中提取数据,以使用 Apache PDFBox 为客户端操作启动直接处理功能。很容易。困难的部分是我公司的客户代表最终客户提交表格,但必须验证最终客户的签名。

签署这些表格的业务案例是通过非正式电子签名(湿签名的数字表示)过程,例如 Adob​​e Reader 中带有客户签名图像的签名 "stamp",或者iPad 上的触摸屏绘图。到目前为止,我一直无法始终如一地验证此类签名,甚至无法始终如一地维护 PDF 状态,以便在此类签名仪式后仍能被 PDFBox 读取。

通过数字签名表单字段验证签名是微不足道的,我已将其传达给我们的企业。但是,由于在这些情况下,签名者通常是正在使用的任何机器上的数字证书的所有者,并且假设大多数这些交互将在客户办公室进行。

我有几个选择:

  1. 想出如何一致识别电子签名,再现无损签字仪式,供客户教育。
  2. 如果可能,请更改数字签名表单字段以接受电子签名。
  3. 我使用最新版本的 Acrobat 将一个图像表单域放在签名区域上,这是一个轻微的解决方法,除了一件事外效果很好:我尝试过的所有软件都将此表单域类型读取为按钮。有什么方法可以强制它识别图像,或者任何更新的 PDF 阅读软件并且可以检测这些字段?

我想上传几个示例 PDF,但当然它们都是公司专有信息。可以这么说,我们没有任何向导可以使用表单做令人惊奇的事情......它们都是您的基本 AcroForms,我正在尝试弄清楚如何配置签名区域。

谢谢。

关于您的实际问题:

I have a slight workaround using the most recent release of Acrobat in putting an image form field over the signature area, which works great except for one thing: all the software I've tried reads this form field type as a button. Is there any way to force it to recognize an image, or any PDF reading software that is more up to date and can detect those fields?

任何将这些字段识别为按钮的 PDF 阅读软件都是最新的,至少在这方面是这样,因为......PDF 文件格式中没有“图像表单字段”!

一些 PDF 创建者 模拟 使用按钮表单域的图像表单域,该按钮表单域通过 JavaScript 获得图像表单域的行为。当然,这种模拟是不完整的。特别是在这样一个字段中的图像不是表单字段的,而仅仅是它的外观

因此,如果要实现从这样的模拟图像表单字段中读取值,则必须提取 外观按钮。


对整个场景的一些评论:

... the end customer signature has to be validated.

The business case for signing these forms is through informal electronic signature (digital representation of a wet signature) processes

与基于证书的数字签名相比,您几乎不能用这种值得称为“验证”的签名做任何事情。

好的,您可以在某个模拟图像字段中查找 PDF 中的图像,但是您不能保证在该图像上可以看到其湿签名的人支持该表单中的数据,更不用说确实签名了它个人。就像其他人只是从一些不同的手签文件中扫描了该人的签名并使用该扫描件填写表格一样...

So far, I have been unable to consistently validate this type of signature

应该可以提取大多数这样的湿签名

  • 作为直接或间接添加到页面内容的位图图像,
  • 或作为位图图像直接或间接添加到某些注释外观(例如按钮),
  • 或作为 InkListPath Ink 注释,
  • 或作为 VerticesPath PolyLine 注释。

如果是位图图像,请不要忘记提取图像遮罩(如果适用)。许多应用程序用笔颜色填充基本图像,并在蒙版中包含实际的签名图。

and even been unable to consistently maintain the PDF state such that it can still be read by PDFBox after this type of signature ceremony.

这听起来像是执行该签字仪式的软件的不当行为。但是,除非您为此分享示例,否则很难帮助您分析问题。