使用 iText 签名字段(数字签名与电子签名图像)- 阅读

With iText Signature Fields (digital signature vs electronic signature image) - Reading

我试图从文档中读取签名,我看到 itext(和 adobe reader)中的不同签名类型。我可以读取带有证书的数字签名等。请参见下面的代码。但我也看到了可填写的 PDF 中的签名类型……看起来像是一张我认为只是电子签名的图像。如何读取签名(或者可能是图像)以提取该签名数据?它会以图像形式出现吗?是否有任何与该签名类型相关联的元数据?

这是我试过但结果是空的代码,

    AcroFields fields = reader.getAcroFields();
    ArrayList<String> names = fields.getSignatureNames();

一般

PDF 规范 ISO 32000-2 中指定的唯一签名类型是认证签名、批准签名、文档时间戳和使用权签名。使用权签名只是一种与 Adob​​e Reader 沟通的方式,它应启用某些通常不活动的功能;它们并不意味着由用户创建或验证为用户签名。因此,让我们忽略它们。

认证签名、批准签名和文档时间戳存储在 AcroForm 签名字段中,您可以使用代码检索使用可互操作签名填写(签名)的签名字段。

因此,您在查看 PDF 时识别出的其他“签名”是

  • 不是可互操作但至少签名符合规范,
  • 或者根据规范,它们甚至不是签名,
  • 或者您的 PDF 已损坏,导致 iText 无法识别签名。

在这两种情况下,都没有通用的方法来找到它们的签名相关信息并对其进行解释。您必须分析 PDF 中低级数据的确切性质,甚至可能需要要求签名的创建者提供足够的信息(规范、解密 material、...),以便能够分析.

在您的示例文件中

对于您共享的示例文件,存在混合(正如 Lonzak 在我写这篇文章时已经解释过的):

  • 它有 6 个空的(未签名的)签名字段。

  • 它有两个带涂鸦的位图,大致位于两个签名表单域的区域。

因此,这些位图图像不会填充任何 AcroForm 表单域。实际上它们根本不代表任何动态内容,它们是静态页面内容的一部分。

尽管如此,根据您当地的立法,这些位图可能算作具有法律约束力(尽管容易否认)的签名。因此,确实可能需要提取这些涂鸦,即使它们没有填写官方的 AcroForm 表单字段。

为此,您必须对 PDF 应用图像提取(带坐标)。要确定哪个位图用于哪个原因,您可以将这些坐标与 6 个空签名字段的坐标进行比较。

而且,用来添加那些涂鸦的Adobe软件还专门给添加的内容打上了自定义标签:

/ADBE_FillSign BMC
q
0 Tc
0 Tw
0 g
0 G
1 w
/GS2 gs
/T1_0 1 Tf
/Fm0 Do
Q
EMC

因此,在自定义代码中要查找此类签名图像,您只需查找标记为 ADBE_FillSign 的内容中引用的图像。显然,这将您的代码限制为使用 Adob​​e 软件添加的潦草签名...

更多问题

您在评论中提出了后续问题。

What is the recommended approach, say for our "clients" that sign the documents to use. They typically will use Mac Preview or Adobe Reader...to sign. For example, should they use the "text" signature?

这首先是一个法律问题;您应该询问您的法律部门或外部律师哪些类型的电子签名适合您的用例,哪些不适合。然后,您可以 select 从可接受的签名类型中选择您愿意在您的软件中支持的签名类型,并要求您的客户使用其中任何一种。

由于我没有 Mac,因此我没有 Mac 预览版的实践经验。不过,它在过去几年中在许多问题上的作用表明,它并不是一个非常忠实的观众。因此,我不会在这里推荐它。但也许它同时提高了实用性。

当前的 Adob​​e Reader 版本应该足够忠实,值得推荐。但是不要忘记清楚地描述如何使用它正确签名。

Also, can multiple people digitally sign?

PDF 可互操作地支持串行数字签名。 IE。第一个签名者签署 PDF 并将带有他签名的 PDF 转发给下一个签名者,他已经用一个签名签署 PDF 并转发它,等等,直到最后一个签名者签名并且您拥有所有签名者签名的 PDF。

多个签名者并行进行数字签名可能无法互操作。 IE。他们不能都签署原始的、未签名的 PDF,并期望他们的签名可以以某种方式合并到一个 PDF 中,并填写所有签名。

What does a verified signature look like and can I have multiple?

(只能验证数字签名,不能验证任意数字签名,所以这里假设你指的是数字签名。)

文档中数字签名的可视化效果完全由签名者自定义。

Adobe Reader 在左侧的签名面板上显示有关数字签名的信息,例如像这样(此屏幕截图本地化为意大利语;您更有可能看到英语)

绿色复选标记和文字说明了签名的验证状态。

有一些方法可以构建数字签名字段,以便 Adob​​e Reader 在文档的签名中显示验证复选标记,例如像这样:

不过你不应该这样做。自十多年前的 Adob​​e Acrobat 6 以来,这已被弃用,并且已被当前的 PDF 标准 ISO 32000-2 禁止。

文档中没有“官方”签名。不过,那里有(未签名的)签名表单字段。您可以在以下屏幕截图中看到它们。您可以通过左上角的红色小箭头识别它们。其他的是文本框。

您看到的所谓签名只是画在场地上的普通图像。这就是为什么你不能分析它们。如果您真的在签名字段上签名,您之后就可以分析,但不能分析那些绘制的签名图像。我将其中一张图片向上移动了一点,向您展示它只是一幅图画...