Рендеринг PDF с использованием PDF.JS и AngularJS из массива байтов

Я следил за следующими ссылками, чтобы попытаться отобразить поток байтов, возвращенный из API, в PDF в браузере, используя PDF.JS:

Вот 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 на моей странице шаблона:

Когда код запускает

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

Я получаю ошибку 404 Not Found на work.js, что имеет смысл, потому что я следую этим примерам и отключая работу, поэтому мне не нужно. У кого-нибудь есть какие-либо советы или простой способ обойти это, что я могу сделать PDF в браузере из потока байтов?

1 ответ

Вам все равно нужен файл pdf.worker.js, даже если вы его отключили. Отключение этого означает, что PDFJS будет использовать поддельных работников, для которых он также использует рабочую библиотеку. Просто установите его следующим образом:

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

licensed under cc by-sa 3.0 with attribution.