之后它没有进入.then
,并且没有抛出任何错误。
这是我的主叫代码:
function loadPage(base64Data, pageIndex) {
var pdfData = base64ToUint8Array(base64Data);
// this gets hit
PDFJS.getDocument(pdfData).then(function (pdf) {
// never gets here
pdf.getPage(pageIndex).then(function (page) {
var scale = 1;
var viewport = page.getViewport(scale);
var canvas = document.getElementById('pdfPage');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
page.render({ canvasContext: context, viewport: viewport });
});
});
}
function base64ToUint8Array(base64) {
var raw = atob(base64); // convert base 64 string to raw string
var uint8Array = new Uint8Array(raw.length);
for (var i = 0; i < raw.length; i++) {
uint8Array[i] = raw.charCodeAt(i);
}
return uint8Array;
}
有一次它奏效了。当我在调试器中单步执行它时,我可以进入PDFJS.getDocument
,但这已经超出了我的想法。
我的base64Data看起来像JVBERi0x...g==
。它是base64编码的pdf文档。
答案 0 :(得分:0)
您的代码中缺少 Promise。在这里我是如何修复这个问题的:
PDFJS.getDocument(pdfData).promise.then(function (pdf) {
// do your stuff
});
答案 1 :(得分:-1)
要解决这个问题,我必须添加
PDFJS.disableWorker = true;
到loadPage
函数的开头。
来自View PDF files directly within browser using PDF.js,
PDF.js在内部使用Web Workers的HTML5概念来处理 请求。如果此语句设置为false,则会创建一个实例 网络工作者。 Web Workers在一个孤立的线程中运行。更多 有关网络工作者的信息请参考 http://www.html5rocks.com/en/tutorials/workers/basics/