如何使用用户密码以编程方式打开PDF

时间:2013-01-30 10:45:06

标签: java pdf jasper-reports password-protection

这与我的 other question有关...希望这个有解决方案。

要求是在浏览器中显示受密码保护的PDF,但以编程方式传递用户密码。我使用Jasper创建PDF并设置用户密码如下:
      exporter.setParameter(JRPdfExporterParameter.USER_PASSWORD,userPassword);

创建PDF后,必须立即在屏幕上显示。在浏览器中显示时,不应提示用户输入密码,因此应由应用程序提供密码但是,如果用户下载PDF然后尝试打开它,则应提示他输入密码。
[编辑]:我正在寻找一种不涉及许可工具的方法

4 个答案:

答案 0 :(得分:1)

您可以使用PDF.JS库打开受密码保护的PDF。

PDFJS.getDocument({ url: pdf_url, password: pdf_password }).then(function(pdf_doc) {
    // success
}).catch(function(error) {
    // incorrect password

    // error is an object having 3 properties : name, message & code
});

我已经写了一篇博文,其中也包含了一个演示。这是链接:http://usefulangle.com/post/22/pdfjs-tutorial-2-viewing-a-password-protected-pdf

答案 1 :(得分:0)

您可以签出PDF.js,这是一个基于开源客户端的PDF渲染器,也支持加密的PDF。 http://mozilla.github.com/pdf.js/

这意味着你必须将你的密码放在javascript的某个地方,所以你必须伪装它,但它应该可以解决这个问题:)

答案 2 :(得分:0)

我不确定这是否可行。在浏览器上,pdf由插件打开 - 通常是Adobe Reader插件。除了Adobe Reader之外还有其他一些功能。 Chrome有自己的插件。

在浏览器上检测到任何PDF文件时 - 渲染插件接管 - 这是浏览器特定的。你几乎没有任何控制权。

简单的替代方法是在网页中显示相同的内容 - 如果内容是敏感的,可能是模态窗口,并提供下载受密码保护的pdf文件的链接

my 2c

答案 3 :(得分:0)

您可以使用mozilla的pdf.js呈现受密码保护的PDF。以下网址将提示您输入密码,直到提供正确的密码为止。 pdf的密码为“ test”。

http://learnnewhere.unaux.com/pdfViewer/passwordviewer.html

这是提示输入密码的示例代码

pdfJs.onPassword = function (updatePassword, reason) { 
      if (reason === 1) { // need a password
            var new_password= prompt('Please enter a password:');
            updatePassword(new_password);
        } else { // Invalid password
            var new_password= prompt('Invalid! Please enter a password:');
            updatePassword(new_password);
        }
   };

如果您想在密码尝试失败时关闭密码提示,则可以删除else部分(//无效密码)。

您可以从此处https://github.com/learnnewhere/simpleChatApp/tree/master/pdfViewer

获取完整的代码