我一直在使用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手册