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

Java 如何使用用户密码以编程方式打开PDF,java,pdf,jasper-reports,password-protection,Java,Pdf,Jasper Reports,Password Protection,这与我的。。。希望这个有个解决办法 要求在浏览器中显示受密码保护的PDF,但要通过编程方式传递用户密码。我使用Jasper创建了一个PDF,并按如下方式设置用户密码: exporter.setParameter(JRPdfExporterParameter.USER\u密码,userPassword) 一旦创建PDF,它就必须显示在屏幕上。在浏览器中显示时,不应提示用户输入密码,因此应用程序应提供密码。但是,如果用户下载PDF并试图打开它,则应提示用户输入密码。 [编辑]:我正在寻找一种不涉及许

这与我的。。。希望这个有个解决办法

要求在浏览器中显示受密码保护的PDF,但要通过编程方式传递用户密码。我使用Jasper创建了一个PDF,并按如下方式设置用户密码:
exporter.setParameter(JRPdfExporterParameter.USER\u密码,userPassword)

一旦创建PDF,它就必须显示在屏幕上。在浏览器中显示时,不应提示用户输入密码,因此应用程序应提供密码。但是,如果用户下载PDF并试图打开它,则应提示用户输入密码。

[编辑]:我正在寻找一种不涉及许可工具的方法

您可以签出PDF.js,这是一种基于开源客户端的PDF呈现程序,还支持加密PDF。


这意味着您必须将密码放在javascript中的某个地方,因此您必须对其进行伪装,但它应该可以做到这一点:)

我不确定这是否可行。在浏览器上,pdf是通过插件打开的——通常是Adobe Reader插件。除了Adobe Reader,还有其他品牌。Chrome有自己的插件

在浏览器上检测到任何PDF文件时,渲染插件将接管,这是特定于浏览器的。你几乎无法控制

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


my 2c

您可以使用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
});

我写了一篇关于它的博客文章,也包含了一个演示。这是链接:

您可以使用mozilla的pdf.js来呈现受密码保护的pdf。下面的url将提示输入密码,直到给出正确的密码。pdf的密码为“test”

下面是提示密码的示例代码

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部分(//无效密码)


您可以从这里获得完整的代码

为什么不能分离浏览器版本并使其免pwd?@TechExchange问题在于,无法在浏览器上阻止“保存”选项。因此,如果我创建一个没有密码的浏览器版本,则可以下载pdf文件,然后在没有密码的情况下打开。@basav,reg。您提到的另一种方法是,“如果内容敏感,可能是一个模式窗口”,当显示pdf时,它会提示输入密码,这是我想要避免的。如果我必须避免提示,那么应该删除密码保护。这意味着,pdf可以不使用密码保存。所以,继续兜圈子吧!:)我的理解正确吗?没有。我的意思是不是直接在浏览器中打开PDF,而是在模式窗口中将PDF的内容显示为网页。找不到任何解决方案。决定使用HTML版本进行查看。