Мы настроили pdf.js для просмотра документов, загружаемых через веб-сайт, которые могут сильно различаться по своему содержанию. Некоторые из загруженных документов содержат цифровые подписи или сертификаты. Мы заметили, что при просмотре этих PDF-файлов в программе просмотра pdf.js они либо вызывают чрезмерную задержку, либо страница отображается как черная. Я не знаю, может ли это быть, потому что мы base64 кодируем PDF перед загрузкой в просмотрщик или нет, но из-за этой проблемы я почесал голову и надеюсь на некоторые указатели.
Вот как мы загружаем документ в просмотрщик pdf.js
function getBase64PDF() {
function arrayBufferToBase64(buffer) {
let binary = '';
let bytes = new Uint8Array(buffer);
let len = bytes.byteLength;
for (let i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return window.btoa(binary);
}
var url = foo;
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
// response is unsigned 8 bit integer
var responseArray = new Uint8Array(this.response);
var pdfData = arrayBufferToBase64(responseArray);
document.getElementById('pdf_viewer').contentWindow.postMessage(pdfData, '*');
};
xhr.send();
}
Мы также включаем ссылки на следующие исходные файлы pdf.js в других местах скрипта:
https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.402/pdf.js
https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.402/pdf.worker.js
https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.402/pdf_viewer.js
и затем запустить getBase64PDF()
при загрузке страницы