这让我完全彻底地疯了......基本上我有一个由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。但我不清楚如何获得这样的证书。使用演示版仍然不允许我正确设置用户权限。
答案 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格式生成器,我没有那个选项......或者有人为此提供了一个出色的解决方案吗?