【问题标题】:Render PDF using PDF.JS and AngularJS from byte array使用字节数组中的 PDF.JS 和 AngularJS 渲染 PDF
【发布时间】:2015-04-12 05:32:02
【问题描述】:

我一直在关注以下链接,尝试使用 PDF.JS 将从 API 返回的字节流渲染到浏览器中的 PDF:

这是用于运行渲染的 JavaScript注意: stream 是从 API 返回的字节数组。

var file = new Blob([stream], {type: 'application/pdf'});
var fileURL = URL.createObjectURL(file);
$scope.renderPDF(fileURL, document.getElementById('pdf-holder'));

这里是$scope.renderPDF

$scope.renderPDF = function(url, canvasContainer) {
    var scale= 1.5;  //"zoom" factor for the PDF

    function renderPage(page) {
        var viewport = page.getViewport(scale);
        var canvas = document.createElement('canvas');
        var ctx = canvas.getContext('2d');
        var renderContext = {
            canvasContext: ctx,
            viewport: viewport
        };

        canvas.height = viewport.height;
        canvas.width = viewport.width;

        canvasContainer.appendChild(canvas);

        page.render(renderContext);
    }

    function renderPages(pdfDoc) {
        for(var num = 1; num <= pdfDoc.numPages; num++)
            pdfDoc.getPage(num).then(renderPage);
    }

    PDFJS.disableWorker = true;
    PDFJS.getDocument(url).then(renderPages);

}

这是我的模板页面中的 HTML

<script type="text/javascript" src="https://cdn.rawgit.com/mozilla/pdf.js/gh-pages/build/pdf.js"></script>

<div id="pdf-holder">
</div>

代码运行时

PDFJS.getDocument(url).then(renderPages);

我在 worker.js 上收到 404 Not Found 错误,这是有道理的,因为我正在遵循这些示例并禁用 worker,所以我不需要它。有没有人有任何建议或简单的方法可以解决这个问题,我可以在浏览器中从字节流中呈现 pdf?

【问题讨论】:

  • 通过禁用 worker,您只是禁用使用 Web Worker 加载 PDF 解析器代码以使旧版浏览器工作。仍然需要加载解析器代码,在您的情况下,它将通过脚本标签加载;你仍然需要设置'workerSrc'
  • 那行得通。我现在收到错误“未处理的承诺拒绝”,因此 getDocument(url) 失败。我的网址是 = blob:http%3A//localhost%3A9000/56cfc1c4-cd80-4284-af8b-a0bdecc163e9 有什么明显的东西会让这个失败吗?
  • PDF.js 文件不在您的本地主机上?首先尝试使其与位于一台服务器上的文件一起工作。

标签: javascript angularjs pdf pdf.js


【解决方案1】:

即使您禁用了 pdf.worker.js,您仍然需要它。禁用它意味着 PDFJS 将使用伪造的工人,它也使用工人库。只需按以下方式设置即可:

PDFJS.workerSrc = 'pdf.worker.js';

【讨论】:

  • 那行得通。我现在收到错误“未处理的承诺拒绝”,因此 getDocument(url) 失败。我的网址是 = blob:http%3A//localhost%3A9000/56cfc1c4-cd80-4284-af8b-a0bdecc163e9 有什么明显的东西会让这个失败吗?
猜你喜欢
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
  • 2014-09-29
  • 1970-01-01
  • 2016-04-20
  • 2015-08-08
相关资源
最近更新 更多