diff options
Diffstat (limited to 'dist/js/pdf-view.js')
-rw-r--r-- | dist/js/pdf-view.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/dist/js/pdf-view.js b/dist/js/pdf-view.js new file mode 100644 index 00000000..74e668f3 --- /dev/null +++ b/dist/js/pdf-view.js @@ -0,0 +1,100 @@ +/** This code is under the Apache License Version 2.0, January 2004 + * http://www.apache.org/licenses/, as it is heavily based on + * documentation of pdf.js (which is under Apache License v2.0) + */ + +PDFJS.workerSrc = 'dist/js/pdf.worker.min.js'; + +var url = 'presentations/investors2017.pdf'; + +var pdfDoc = null, + pageNum = 1, + pageRendering = false, + pageNumPending = null, + scale = 1, + canvasLeft = document.getElementById('the-canvas-left'), + canvasRight = document.getElementById('the-canvas-right'); + +/** + * Get page info from document, resize canvas accordingly, and render page. + * @param num Page number. + */ +function renderPage(canvas,num) { + pageRendering = true; + // Using promise to fetch the page + pdfDoc.getPage(num).then(function(page) { + var viewport = page.getViewport(scale); + canvas.height = viewport.height; + canvas.width = viewport.width; + + // Render PDF page into canvas context + var renderContext = { + canvasContext: canvas.getContext('2d'), + viewport: viewport + }; + var renderTask = page.render(renderContext); + + // Wait for rendering to finish + renderTask.promise.then(function() { + pageRendering = false; + if (pageNumPending !== null) { + // New page rendering is pending + renderPage(pageNumPending); + pageNumPending = null; + } + }); + }); + + // Update page counters + document.getElementById('page_num').textContent = pageNum; +} + +/** + * If another page rendering in progress, waits until the rendering is + * finised. Otherwise, executes rendering immediately. + */ +function queueRenderPage(num) { + if (pageRendering) { + pageNumPending = num; + } else { + renderPage(canvasLeft,num); + renderPage(canvasRight,num+1); + } +} + +/** + * Displays previous page. + */ +function onPrevPage() { + if (pageNum <= 1) { + return; + } + pageNum--; + queueRenderPage(pageNum); +} +document.getElementById('canvas-left').addEventListener('click', onPrevPage); + +/** + * Displays next page. + */ +function onNextPage() { + if (pageNum >= pdfDoc.numPages - 1) { + return; + } + pageNum++; + queueRenderPage(pageNum); +} +document.getElementById('canvas-right').addEventListener('click', onNextPage); + +document.getElementById('canvas-right').style.display = 'block'; +document.getElementById('canvas-left').style.display = 'block'; + +/** + * Asynchronously downloads PDF. + */ +PDFJS.getDocument(url).then(function(pdfDoc_) { + pdfDoc = pdfDoc_; + + // Initial/first page rendering + renderPage(pageNum); +}); |