印章和签名
首先,在对这个问题的评论中,有一些关于电子印章和签名的讨论。
从法律上讲(在 eIDAS 的背景下),它们之间是完全不同的。但是,从技术上讲,两者通常都是作为数字签名实现的,在 PDF 的上下文中更准确地说是作为 PAdES 签名;主要区别在于使用的签名者证书表明您是否有电子印章或签名。
因此,问题归结为 OpenPDF 是否支持创建 PAdES 签名。
OpenPDF 和 PAdES
OpenPDF 是 iText 的最后一个非 AGPL 版本的一个分支,即在 2009-11-27 13:59:39 标记的非官方版本 iText 4.2.0 Bruno Lowagie。在那一年,ETSI 刚刚发布了 PAdES 签名的第一版作为技术规范 (TS),而不是欧洲标准 (EN)。
因此,当时的 iText 库不包含任何明确的 PAdES 支持,仅针对可互操作的 ISO 32000-1 签名类型。不过,它提供了一个选项,主要是自己创建签名字典并注入您自己的定制签名容器。因此,通过使用此选项,您可以创建 PAdES 签名,不仅可以使用 ISO 32000-1 兼容性配置文件,还可以使用 BES 和 EPES 配置文件。
从那时起,OpenPDF 签名 API 几乎没有改变;因此,仍然没有对 PAdES 的明确支持,但接口是开放的,可以注入签名字典和签名容器,以创建匹配简单 PAdES 配置文件(Baseline-B、Baseline-T、E-BES、E-EPES)的签名。
因此,关于您的问题
仅使用 OpenPDF 就可以有效地实现这一目标吗?
使用 OpenPDF 是可能的,但根据您想要的确切配置文件,您必须添加一些代码以相应地生成签名字典和签名容器。
或者是否存在其他库?
是的。例如
- iText(很久以前从 OpenPDF 派生出来的)同时得到了进一步的开发,并包含一些更明确的 PAdES 支持。
- 用于 PDF 签名的CEF eSignature 数字签名服务套件使用 PDFBox 或 OpenPDF 作为基础 PDF 库,但构建了自己的签名字典和签名容器。
- ...
(不过,对于库推荐,请使用Software Recommendations Stack Exchange而不是堆栈溢出,严格来说它们在这里是题外话。)