是否可以使用数字签名在PHP中生成PDF文件?开源解决方案是首选。
答案 0 :(得分:22)
从版本5.5.001(2010-06-23发布)开始的TCPDF可以对生成的PDF文档进行签名。
它还可以在任何位图/文本上放置透明签名矩形字段,因此单击签名字段会显示签名面板 - 酷炫功能。 seta-PDF签名者也一样,但是你需要支付: - )
如果使用FPDI桥接扩展TCPDF,它还可以解析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。根据我的经验,这是一个单人表演......
干杯 Lubos
答案 1 :(得分:2)
VersyPDF PHP library(商业)也会签署文件
也可以使用开源iText java库和PHP-Java bridge来进行通信。请参阅此
上的iText FAQiText可以通过自签名,veriSign插件或Windows证书安全性来签署文档。当我过去在Java项目中使用它时,签署文档只是应对examples,通常需要不到一百行。最难的是获得正确的证书来签名。
答案 2 :(得分:0)
There's something called SetaPDF-Signer.但它不是免费的:S
SetaPDF-Signer API允许PHP开发人员使用纯PHP对PDF文档进行数字签名。