使用PDF.JS和AngularJS从字节数组渲染PDF

时间:2015-02-11 18:03:27

标签: javascript angularjs pdf pdf.js

我一直在关注以下链接,尝试使用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?

1 个答案:

答案 0 :(得分:2)

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

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