#javascript #html #pdf #web #pdf.js
#javascript #HTML #PDF #веб #pdf.js
Вопрос:
Я пытаюсь использовать pdf.js
на своей веб-странице, где мне нужно проверить правильность пароля, введенного пользователем PDF, перед загрузкой его на сервер.
Но я не могу заставить его работать.
Я использовал CDN, размещенный pdf.min.js
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.6.347/pdf.min.js" integrity="sha512-Z8CqofpIcnJN80feS2uccz pXWgZzeKxDsDNMD/dJ6997/LSRY W4NmEt9acwR Gt9OHN0kkI1CTianCwoqcjQ==" crossorigin="anonymous"></script>
и это функция проверки пароля:
function checkPass() {
pdfjsLib.getDocument({
url: 'pdf.pdf',
password: '01010101'
}).promise.then(function (pdf) {
input.classList.add("rightpass");
}).catch(function (error) {
input.classList.add("wrongpass");
console.log(error);
});
}
и в журнале консоли он регистрирует Deprecated API usage: No "GlobalWorkerOptions.workerSrc" specified.
Я пытался отключить его с помощью pdfjsLib.disableWorker = true;
, но это не сработало.
Мне просто нужно проверить пароль и больше ничего, без рендеринга.
Комментарии:
1. какова цель этого? если вы подтвердите пароль на клиенте, вы не достигнете безопасности, потому что ваша серверная конечная точка до сих пор открыта для загрузки непроверенных файлов, и ваша проверка пароля может быть обойдена. правильный способ отфильтровать ненужные файлы PDF находится на сервере — загрузите любой файл, проверьте пароль, удалите файл и верните ошибку, если пароли не совпадают.
2. Проверка пароля на стороне клиента для файлов PDF предназначена для ускорения работы с пользовательским интерфейсом.
3. итак, вы дважды проверяете пароль на серверной части?
4. не совсем. pdf защищен паролем, и для выполнения работы по обработке с менее распространенными ошибками, такими как неправильные пароли, я проверяю их на стороне клиента.
5. i c. ну, я не смог найти никакой хорошей документации по pdf.js (что удивительно, учитывая, кто является поставщиком). извините, я больше не могу вам помочь. я подозреваю, однако, что предупреждение «устаревшее» не связано с тем фактом, что вы не можете проверить пароль.
Ответ №1:
Вот рабочий пример кода:
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.6.347/pdf.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.6.347/pdf.worker.min.js"></script>
<script>
const pdfName = "empty-protected.pdf";
async function loaded()
{
const loadingTask = pdfjsLib.getDocument({ url: pdfName, password: "qwerty" });
loadingTask.promise.then(() => console.log(1, "OK"), (ex) => console.log(1, ex));
const loadingTask2 = pdfjsLib.getDocument({ url: pdfName, password: "" });
loadingTask2.promise.then(() => console.log(2, "OK"), (ex) => console.log(2, ex));
}
</script>
</head>
<body onload="javascript:loaded();">
</body>
</html>
Вот защищенный паролем PDF-файл (пароль qwerty
), который я использовал для эксперимента:
https://mega.nz/file/lJg2GKgS#AdVJ0DZ1OfsGrlSqM67dfr_r2n8lBiiOm9q0o4wt7e4
Включение pdf.worker.min.js
изменяет предупреждение "Warning: Deprecated API usage: No "GlobalWorkerOptions.workerSrc" specified."
на "Warning: Setting up fake worker."
Комментарии:
1. как я упоминал в своем комментарии, что pdf.worker.min.js был тот, который мне был нужен. поскольку это основной уровень библиотеки. смотрите здесь mozilla.github.io/pdf.js/getting_started спасибо, Дэниел, за уделенное время, приятель.