aboutsummaryrefslogtreecommitdiff
path: root/dist/js/pdf-view.js
diff options
context:
space:
mode:
Diffstat (limited to 'dist/js/pdf-view.js')
-rw-r--r--dist/js/pdf-view.js100
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 @@
1/** This code is under the Apache License Version 2.0, January 2004
2 * http://www.apache.org/licenses/, as it is heavily based on
3 * documentation of pdf.js (which is under Apache License v2.0)
4 */
5
6PDFJS.workerSrc = 'dist/js/pdf.worker.min.js';
7
8var url = 'presentations/investors2017.pdf';
9
10var pdfDoc = null,
11 pageNum = 1,
12 pageRendering = false,
13 pageNumPending = null,
14 scale = 1,
15 canvasLeft = document.getElementById('the-canvas-left'),
16 canvasRight = document.getElementById('the-canvas-right');
17
18/**
19 * Get page info from document, resize canvas accordingly, and render page.
20 * @param num Page number.
21 */
22function renderPage(canvas,num) {
23 pageRendering = true;
24 // Using promise to fetch the page
25 pdfDoc.getPage(num).then(function(page) {
26 var viewport = page.getViewport(scale);
27 canvas.height = viewport.height;
28 canvas.width = viewport.width;
29
30 // Render PDF page into canvas context
31 var renderContext = {
32 canvasContext: canvas.getContext('2d'),
33 viewport: viewport
34 };
35 var renderTask = page.render(renderContext);
36
37 // Wait for rendering to finish
38 renderTask.promise.then(function() {
39 pageRendering = false;
40 if (pageNumPending !== null) {
41 // New page rendering is pending
42 renderPage(pageNumPending);
43 pageNumPending = null;
44 }
45 });
46 });
47
48 // Update page counters
49 document.getElementById('page_num').textContent = pageNum;
50}
51
52/**
53 * If another page rendering in progress, waits until the rendering is
54 * finised. Otherwise, executes rendering immediately.
55 */
56function queueRenderPage(num) {
57 if (pageRendering) {
58 pageNumPending = num;
59 } else {
60 renderPage(canvasLeft,num);
61 renderPage(canvasRight,num+1);
62 }
63}
64
65/**
66 * Displays previous page.
67 */
68function onPrevPage() {
69 if (pageNum <= 1) {
70 return;
71 }
72 pageNum--;
73 queueRenderPage(pageNum);
74}
75document.getElementById('canvas-left').addEventListener('click', onPrevPage);
76
77/**
78 * Displays next page.
79 */
80function onNextPage() {
81 if (pageNum >= pdfDoc.numPages - 1) {
82 return;
83 }
84 pageNum++;
85 queueRenderPage(pageNum);
86}
87document.getElementById('canvas-right').addEventListener('click', onNextPage);
88
89document.getElementById('canvas-right').style.display = 'block';
90document.getElementById('canvas-left').style.display = 'block';
91
92/**
93 * Asynchronously downloads PDF.
94 */
95PDFJS.getDocument(url).then(function(pdfDoc_) {
96 pdfDoc = pdfDoc_;
97
98 // Initial/first page rendering
99 renderPage(pageNum);
100});