0

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

所以我使用 OpenSSL 生成了一个 SSL 证书和私有证书,并使用 setSignature 方法“导入”了它们。如果不使用这种方法,Adobe Reader 会抱怨:

本文档启用了 Adob​​e 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 包含一个使用演示证书的示例。但我不清楚如何获得这样的证书。使用演示版仍然不允许我正确设置用户的权限。

4

3 回答 3

2

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

于 2010-08-06T11:44:44.117 回答
0

您是否尝试过不调用 setUserRights?根据最后一个参数设置权限的文档。也许第二个调用修改了 pdf,因此签名不再与 PDF 匹配,因为它已更改?

于 2010-03-09T17:52:21.053 回答
0

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

基本上答案是做不到。尽管文档指出:

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

但这显然是过时的信息。它使用一种解决方法在 Acrobat Reader 8 中工作,但现在不再适用。因此,唯一的解决方案是使用 TCPDF 生成 PDF 并将其通过 Adob​​e Acrobat 并在那里设置用户权限。由于我的应用程序是服务器端 PDF 表单生成器,因此我没有该选项...或者有人对此有出色的解决方案吗?

于 2010-03-11T14:10:56.817 回答