在浏览器中检测 PDF 是否被锁定或加密

geo*_*boy 5 javascript pdf reactjs exif-js

在我的应用程序中,用户可以上传 PDF,其他用户稍后可以查看。对于我的用例,我需要确保 PDF 没有被锁定或加密,并且任何其他用户都可以查看。

为此,我要求用户上传未锁定的 PDF,并希望在尝试上传到 S3 之前,如果 PDF 已锁定,则抛出错误。

我还没有就在浏览器中执行此操作的最佳方法达成共识?我是否尝试读取缓冲区并在无法读取时抛出错误?或者是否有另一种高性能且有效的方法来检测这一点?

Eri*_*sen 2

在客户端检测状态对于用户体验、带宽和性能都更好。您可以在页面上放置一个文件输入元素,并捕获 onChange 事件。

<input type="file" id="pdfFile" size="50" onChange='processFile' />
Run Code Online (Sandbox Code Playgroud)

在 onChange 处理函数内部,您可以获取文件字节并将其加载到缓冲区中。有关代码和更多详细信息,请参阅在各种浏览器中使用 javascript 在客户端读取文件内容

您需要进行一些 PDF 解析才能了解锁定/加密状态,但我想有 JS 库可以做到这一点。即使您有非常大的 PDF 需要解析,它也总是比将 PDF 上传到服务器要快,因为上传时间将是文件大小的函数。

我可以看到上传文件而不是客户端解析的情况:

  • 您的目标是低端移动设备并期望 PDF 大小为 +100mb。
  • 您将在具有 Javascript 限制的浏览器上运行
  • 即使 PDF 受到保护,您仍然希望将文件上传到服务器,并且您已经发现用户体验会更好