我一直在關注以下鏈接,試圖呈現一個字節流從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