Javascript 使用字节数组中的PDF.JS和AngularJS呈现PDF
我一直在以下链接中尝试使用PDF.JS在浏览器中将API返回的字节流呈现为PDF:Javascript 使用字节数组中的PDF.JS和AngularJS呈现PDF,javascript,angularjs,pdf,pdf.js,Javascript,Angularjs,Pdf,Pdf.js,我一直在以下链接中尝试使用PDF.JS在浏览器中将API返回的字节流呈现为PDF: 下面是用于运行渲染的JavaScript注意:流是从API返回的字节数组 var file = new Blob([stream], {type: 'application/pdf'}); var fileURL = URL.createObjectURL(file); $scope.renderPDF(fileURL, document.getElementById('pdf-holder')); 这
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);
}
我在worker.js上得到了一个404NotFound错误,这是有意义的,因为我遵循这些示例并禁用了worker,所以我不需要它。有没有人有什么建议或简单的方法可以让我从字节流在浏览器中呈现pdf?即使禁用了pdf.worker.js,您仍然需要它。禁用它意味着PDFJS将使用伪造的worker,而它也在使用worker库。只需按以下方式进行设置:
PDFJS.workerSrc = 'pdf.worker.js';
通过禁用worker,您只需禁用使用Web worker加载PDF解析器代码,即可使传统浏览器正常工作。解析器代码仍然需要加载,在您的情况下,它将通过script标记加载;您仍然需要设置“workerSrc”才能正常工作。我现在收到错误“未处理的承诺拒绝”,因此getDocument(url)失败。我的url=blob:http%3A//localhost%3A9000/56cfc1c4-cd80-4284-af8b-a0bdecc163e9是否有任何明显的原因会导致此失败?PDF.js文件不在您的localhost上?首先尝试使用位于一台服务器上的文件。这样就可以了。我现在收到错误“未处理的承诺拒绝”,因此getDocument(url)失败。我的url=blob:http%3A//localhost%3A9000/56cfc1c4-cd80-4284-af8b-a0bdec163e9是否有任何明显的原因会导致此失败?
PDFJS.getDocument(url).then(renderPages);
PDFJS.workerSrc = 'pdf.worker.js';