PDF.js -输入错误密码时的回呼问题

PDF.js - Password Callback Issue When Wrong Password is Entered

本文关键字:问题 密码 js 输入 错误 PDF      更新时间:2023-09-26

我正在为我的项目使用pdf.js,我正面临加密pdf的问题。我使用PDF.js passwordCallback函数来提供密码。

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

下面是passwordCallback函数

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}).

是否有其他方式为文档提供密码?有关于这个场景的文章或例子吗?

下面是一个例子:

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);
};

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

参见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被调用。

请参考下面的url,该url将提示输入密码,直到给出正确的密码。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