【问题标题】:PDF.js - Password Callback Issue When Wrong Password is EnteredPDF.js - 输入错误密码时的密码回调问题
【发布时间】:2017-03-27 09:24:29
【问题描述】:

我在我的项目中使用 pdf.js,但我遇到了加密 pdf 的问题。我正在使用 PDF.js 的密码回调函数来提供密码。

PDFJS.getDocument(file, null, passwordCB, null).then(function (res) {
console.log("Document Decrypted);
});

这里是密码回调函数

var passwordCB = function (passwordFunc, reason) {
  if (reason === 1) {
    passwordFunc(pdfpassword);
  } else {
    console.log("Wrong Password");
  }
};

当密码错误时,控制不会退出passwordCB功能。在提供有效密码之前,它会卡住。

所以当用户输入错误密码时,我必须告诉他们密码错误,需要获取新密码。我没有使用默认的 javascript 提示符。

有没有办法打破 passwordCallback 函数并返回 getDocument() 承诺?

另外,从源代码中提到 passwordCallback 已被弃用。

* @param {function} passwordCallback (deprecated) It is used to request a
* password if wrong or no password was provided. The callback receives two
* parameters: function that needs to be called with new password and reason
* (see {PasswordResponses}).

还有其他方法可以为文档提供密码吗?关于这种情况的任何文章或示例?

【问题讨论】:

  • github.com/mozilla/pdf.js/issues/7806 发帖——在那里回答。
  • 这有点令人困惑。您有使用 passwordCallback 或 onPassword 回调处理 PDF 错误密码的示例吗?

标签: javascript pdf firefox mozilla pdf.js


【解决方案1】:

这是一个例子,给你:

function loadDocumentUsingPassword(){
    PDFJS.getDocument(file, null, passwordCB, null).then(function (res) {
        console.log("Document Decrypted");
    });

function passwordCB (passwordFunc, reason) {
  if (reason === 1) { // need a password
    var new_password= confirm('Please enter a password:')
  } else { // Invalid password
    var new_password= confirm('Invalid! Please enter a password:')
  }
  passwordFunc(new_password);
};

要求用户输入密码。直到他进入

【讨论】:

  • 这进入了我的角度服务。我不能使用确认或任何本机 javascript 的东西。我需要打破这个承诺并用新密码再次调用它。有什么想法吗?
  • 你不需要打破。您可以在此处使用角度代码。请上传带有您代码的 JSFiddle,我们会尽力提供帮助
  • 感谢您的帮助。这是 plunker plnkr.co/edit/LNACGO5OFmasiUH3L896?p=preview 如果您需要有关代码的更多详细信息,请告诉我
【解决方案2】:

https://github.com/mozilla/pdf.js/blob/7f6a607ea537a6237802fe11e211afb2b19af9cf/web/app.js#L649

var loadingTask = pdfjsLib.getDocument(parameters);
loadingTask.onPassword = function passwordNeeded(updateCallback, reason) {
  savedUpdateCallback = updateCallback;
  // show reason to user
};

https://github.com/mozilla/pdf.js/blob/7f6a607ea537a6237802fe11e211afb2b19af9cf/web/password_prompt.js#L106:

// collect newPassword
savedUpdateCallback(newPassword);

无需取消 loadingTask——它会等到保存的updateCallback 被调用。

【讨论】:

【解决方案3】:

请参考下面提示输入密码的网址,直到输入正确的密码。 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);
        }
   };

您可以从这里获得完整的代码https://github.com/learnnewhere/simpleChatApp/tree/master/pdfViewer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2013-03-13
    • 2017-11-10
    • 1970-01-01
    • 2015-12-03
    相关资源
    最近更新 更多