我们已经设置pdf.js来查看通过网站上传的文档,这些文档的内容可能相差很大。上载的某些文档包含数字签名或证书。我们已经注意到,当在pdf.js查看器中查看这些PDF时,它们会导致极度滞后或页面呈现为黑色。我不知道这是否是因为我们在将PDF加载到查看器之前是否对base64进行了编码,但是这个问题使我抓狂了,并希望有一些指针。
这是我们将文档加载到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()