1

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

4

2 回答 2

0

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

PDFJS.disableWorker = true;

到我的loadPage功能的开始。

使用 PDF.js 直接在浏览器中查看 PDF 文件

PDF.js 在内部使用 HTML5 的 Web Workers 概念来处理请求。如果此语句设置为 false,它会创建一个 Web 工作者实例。Web Worker 在一个独立的线程中运行。有关网络工作者的更多信息;请参考 http://www.html5rocks.com/en/tutorials/workers/basics/

于 2015-12-03T16:08:29.340 回答
0

您的代码中缺少 Promise。这是我如何解决这个问题的:

PDFJS.getDocument(pdfData).promise.then(function (pdf) { 
   // do your stuff
});
于 2021-01-15T16:40:00.883 回答