【问题标题】:TCPDF PDF forms, signing certificates and how to enable user's rightsTCPDF PDF 表格、签署证书以及如何启用用户权限
【发布时间】:2011-01-23 15:17:09
【问题描述】:

这让我彻底发疯......基本上我有一个由 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');

有没有人使用过这个特定的功能并且能够指出我在这里做错了什么?

更新

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

【问题讨论】:

    标签: php pdf certificate pdf-generation tcpdf


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我前一段时间也在TCPDF论坛上问过这个问题并得到了上述答案。可惜的是,读写表单是一个相当普遍的功能。
    【解决方案2】:

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

    【讨论】:

    • 只设置签名不影响文档。 Acrobat Reader 仅在启用 setUserRights 时显示消息。无论是否设置了 setUserRights,我都不允许保存表单数据。
    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 2020-03-21
      • 1970-01-01
      相关资源
      最近更新 更多