TCPDF PDF表单,签名证书以及如何启用用户权限

时间:2010-03-04 11:08:19

标签: php pdf certificate pdf-generation tcpdf

这让我完全彻底地疯了......基本上我有一个由TCPDF生成的PDF表单,并希望为该PDF设置用户权限(使用setUserRights),以便用户可以使用他们输入的数据保存表单。 TCPDF手册在这一点上并没有真正的帮助,并指出您需要一个“签名证书”来启用保存和其他扩展功能。

所以我使用OpenSSL生成了SSL证书和私有证书,并使用setSignature方法“导入”它们。不使用该方法Adobe Reader呻吟:

  

此文档已启用扩展   Adobe Reader中的功能。该文件   自创建以来已被更改   并且使用扩展功能是没有的   更长的时间。请联系   作者的原始版本   这份文件。

当设置了所需的setSignature方法时,该消息未出现,但Reader仍然无法保存PDF。

$this->Pdf->setSignature("file:///certificates/forms.crt", "file:///certificates/forms.key", "somepassword", "", 3);

然后我设置了完整的用户权限:

$this->Pdf->setUserRights(true, '/FullSave', '/Create/Delete/Modify/Copy/Import/Export', '/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate', '/Modify');

有没有人使用过这个特殊功能,能够指出我在这里做错了什么?

更新

TCPDF使用演示证书包含an example。但我不清楚如何获得这样的证书。使用演示版仍然不允许我正确设置用户权限。

3 个答案:

答案 0 :(得分:2)

setUserRights()过去使用旧的Acrobat Reader版本,因为这些版本存在错误。 AFAIK,只有官方Acrobat产品才能使用Adobe私钥释放用户权限。 这意味着除非您是Adobe,否则setUserRights()不再起作用了!

答案 1 :(得分:0)

你试过没有setUserRights电话吗?根据最后一个参数设置权限的文档。也许第二个调用会修改pdf,因此签名不再与PDF匹配,因为它已经改变了?

答案 2 :(得分:0)

我希望回答我自己的问题是合适的。我在TCPDF论坛上问了这个问题,得到了TCPDF维护者之一的答案。

基本上答案是它无法完成。虽然文档说明:

  

指定其他名称的名称   文档范围的使用权   文献。唯一定义的值是   “/ FullSave”,允许用户使用   保存文档以及修改   表格和/或注释数据。

但这显然是过时的信息。它使用解决方法在Acrobat Reader 8中工作,但现在不再使用了。所以唯一的解决方案是使用TCPDF生成PDF并通过Adobe Acrobat传递它并在那里设置用户权限。由于我的应用程序是服务器端PDF格式生成器,我没有那个选项......或者有人为此提供了一个出色的解决方案吗?