PDFJS.getDocument 不工作并且没有抛出错误

PDFJS.getDocument not working and not throwing an error

之后不会进入 .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文档。

为了解决这个问题,我不得不添加

PDFJS.disableWorker = true;

到我的 loadPage 函数的开头。

来自 View PDF files directly within browser using PDF.js,

PDF.js uses Web Workers concept of HTML5 internally to process the request. If this statement is set to false, it creates an instance of Web workers. Web Workers run in an isolated thread. For more information on web workers; please refer http://www.html5rocks.com/en/tutorials/workers/basics/

您的代码中缺少 Promise。这是我解决问题的方法:

PDFJS.getDocument(pdfData).promise.then(function (pdf) { 
   // do your stuff
});