PDFJS.getDocument无效并且不会抛出错误

时间:2015-12-02 22:14:18

标签: pdfjs

之后它没有进入.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文档。

2 个答案:

答案 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/