我一直在关注以下链接,试图呈现一个字节流从API浏览器返回到PDF使用PDF.JS渲染PDF:使用PDF.JS和AngularJS从字节数组
- http://codingcrazy87.blogspot.com/2014/05/view-pdf-files-directly-within-browser.html
- https://gist.github.com/fcingolani/3300351
这里是的JavaScript用于运行呈现。 注意:流是从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使用Web Worker加载PDF解析器代码即可使传统浏览器正常工作。解析器代码仍然需要加载,在你的情况下,它将通过脚本标签加载;你仍然需要设置'workerSrc' – async5 2015-02-12 13:15:39
这是行得通的。我现在得到错误“未处理的承诺拒绝”,所以getDocument(url)失败。我的网址= blob:http%3A // localhost%3A9000/56cfc1c4 -cd80-4284-af8b-a0bdecc163e9有没有什么明显的事情会导致失败? – 2015-02-12 14:57:24
PDF.js文件不在您的localhost上?尝试使其与首先位于一台服务器上的文件协同工作。 – async5 2015-02-12 22:50:13