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

时间:2016-11-13 17:48:14

标签: javascript pdf firefox mozilla pdf.js

我正在为我的项目使用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}).

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

3 个答案:

答案 0 :(得分:0)

以下是一个例子:

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

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

答案 1 :(得分:0)

请参阅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

答案 2 :(得分:0)

请参考以下网址,提示输入密码,直到输入正确的密码为止。 pdf的密码为“ test”。

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

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

import { Dropdown } from 'semantic-ui-react';

type formProps = {
    funcionCierre: any
    carrera: any;
    nombre1: any;
}

const Estudiantes: React.FC<formProps> = (props: formProps) => {

    const [area, setArea] = useState<any[]>([]);
    const [areaSeleccionada, setAreaSeleccionada] = useState(0);

    useEffect(() => {
        console.log(props.carrera);
        axios.get('http://localhost:8003/skill?carrera_id=' + props.carrera + '&tipo_id=1')
            .then(result => {
                setArea(result.data);
            }

            ).catch(error => {
                console.log(error);
            });

    }, [area.length]);


    const actualizarAreaSelect = (e: any) => {
        setAreaSeleccionada(e.target.value)
        console.log(areaSeleccionada);
    }

    return (
               <Dropdown
                 placeholder='Area'
                 options={area.map(ar => ({
                 key: ar.skil_id,
                 value: ar.skill_id,
                 text: ar.nombre
                 }))}
                 onChange={actualizarAreaSelect}
                />

    );
}

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

获取完整的代码