是否可以在 PHP 中生成带有数字签名的 PDF 文件?首选开源解决方案。
3 回答
TCPDF 从版本 5.5.001(2010-06-23 发布)开始可以签署生成的 PDF 文档。
它还可以在任何位图/文本上放置透明的签名矩形字段,因此单击签名字段会显示签名面板 - 很酷的功能。seta-PDF 签名者也是如此,但是您必须付费:-)
如果 TCPDF 使用 FPDI 桥接器进行扩展,它还可以解析现有的 PDF 版本高达 1.7 的文档,并使用 X.509 证书对其进行签名。它可以 100% 解析自己生成的 PDF 文档或任何其他 PHP PDF 工具(例如 FPDF、DOM PDF、mPDF 等)创建的 PDF 文档,计算 PDF 签名并写回相同的签名 PDF 文档。
但是,如果您想解析由其他(例如二进制)PDF 生成器(iText、..)创建的 PDF 文档,它可能无法解析该文档。您可以尝试另一个 PDF 解析器(我只知道 Zend Framework PDF Parser 值得尝试),但是它可能无法读取和反编译 PDF 文档的整个结构,因为 PHP 对 PDF 定义的实现有限(PHP 是主要的文本脚本语言,无法处理二进制文件东西很容易,所以这是限制的根源)。
因此,如果您正在考虑在您的网站上生成 PDF,请使用相同的工具来创建 PDF 文档和签名 - 我可以在这里推荐的最佳工具是 TCPDF。如果您还没有听说过,请通过 google 查找 (:-o)
目前,我不认为 DOM PDF 可以签署 PDF 文档。
VersyPDF 是 .dll/.so PHP 扩展名,支持非常差,价格昂贵,而且文档记录很差。您可能会遇到没有错误消息的无声崩溃...它也不支持现在标准的 256 位 AES 证书。如果您作为开发人员在 32 位机器上运行,而在生产中运行 64 位机器,则必须获得不同的重新编译版本。我们用 TCPDF 替换了 VersyPDF。性能损失几乎不显着,我们能够动态生成 300 - 600 kB PDF 签名文档。很遗憾,否则 VersyPDF 有一些不错的 API,如果你使用它和良好的性能。根据我的经验,这是一场单人表演...
干杯卢博斯
VersyPDF PHP 库(商业)也将签署文件
也可以使用开源iText java 库和PHP-Java 桥来进行通信。请参阅有关此的iText常见问题解答
iText 可以通过自签名、veriSign 插件或 windows Certificate Security 对文档进行签名。当我过去在 Java 项目中使用它时,签署文档只是应对示例,通常需要不到一百行。最难的是获得正确的证书来签署它。
有一种叫做 SetaPDF-Signer 的东西。虽然它不是免费的:S
SetaPDF-Signer API 允许 PHP 开发人员在纯 PHP 中对 PDF 文档进行数字签名。