如何从PHP或JavaScript中删除.pdf限制



我一直在使用qpdf来删除.pdf限制,这可以通过php使用,如下所示:

shell_exec('qpdf --decrypt "'.$pdfName.'" unlocked.pdf');

这在本地主机上运行良好,但出于安全原因,不可能在共享web主机上执行。

因此,我正在寻找另一种方法,使之在没有shell命令的情况下工作。

有关于PHP或JavaScript语言的解决方案吗?

编辑

我正在测试的pdf没有被密码阻止,我只知道我不能从中复制文本,但在应用"qpdf--decrypt.."命令后,我可以做到。

您可以在GitHub php pdftk 中使用以下存储库

示例PHP代码:

use mikehaertlpdftkPdf;
$pdf = new Pdf('/path/my.pdf');
$pdf->allow('AllFeatures')      // Change permissions
->flatten()                 // Merge form data into document (doesn't work well with UTF-8!)
->compress($value)          // Compress/Uncompress
->keepId('first')           // Keep first/last Id of combined files
->dropXfa()                 // Drop newer XFA form from PDF
->dropXmp()                 // Drop newer XMP data from PDF
->needAppearances()         // Make clients create appearance for form fields
->setPassword($pw)          // Set owner password
->setUserPassword($pw)      // Set user password
->passwordEncryption(128)   // Set password encryption strength
->saveAs('new.pdf'); 

您所需要的一切都可以通过Mozilla用JavaScript(PDF.js)编写的PDF阅读器实现。您可以在共享网络托管上无限制地显示所有PDF。我现在已经测试了它的文本复制、文档打印和其他限制——你可以不受限制地完成所有这些。

仅对于文档读取密码,您需要一个密码,我希望您理解,如果密码足够强大,则任何其他软件都无法删除此密码。您也可以使用密码联机打开所有文档(如果有密码的话),但将跳过所有其他限制。我用所有者和用户密码的256位密钥长度对它进行了测试。

在线演示

如果有人不了解OP(原始海报)中的QPDF库,我会发现关于这个QPDF库的以下信息:

一个安全的PDF文件有两种类型的密码:OWNER和USER
所有者密码用于强制执行权限
USER密码用于打开pdf文件

如果它也有USER密码保护,您可以解密它,但您需要知道密码。

使用此库,您不需要编写显式某些代码来删除PDF限制。它通过自动读取文档来删除限制(所有者密码)。在这种情况下,如果设置了用户密码(用于打开PDF文件),则它会通过读取文档自动显示该密码的输入对话框

结论:在有限制的情况下,OP的PDF.js库和QPDF库是一样的。

如何开始

只需打开下面的主页链接,然后转到入门网站(您会在页面顶部找到这种可能性)-您会在那里找到所有入门说明。

PDF.js是一个开源项目(GitHub链接)。

在这个主页上,您会发现:

  • 入门信息
  • 示例(大量代码示例)
  • 常见问题解答
  • API说明

有用的链接:

  • 问题报告指南
  • 代码贡献指南
  • 好的入门Bug
  • 使用PDF.js的示例项目
  • QPDF手册

最新更新