]> git.parisson.com Git - pdf.js.git/commitdiff
Added font loading in the multi-page viewer. Added support for changing the zoom...
authorJustin D'Arcangelo <justindarc@gmail.com>
Sat, 18 Jun 2011 09:52:24 +0000 (05:52 -0400)
committerJustin D'Arcangelo <justindarc@gmail.com>
Sat, 18 Jun 2011 09:52:24 +0000 (05:52 -0400)
multi-page-viewer.css
multi-page-viewer.html
multi-page-viewer.js

index 488b10bd9030e5448fab069b7040f46fba02fa89..013ca6aafd6d11a6fbec0d1d7ee13371727fc8fb 100644 (file)
@@ -2,6 +2,7 @@
 /* vim: set shiftwidth=4 tabstop=8 autoindent cindent expandtab: */
 
 body {
+    background-color: #929292;
     font-family: 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;
     margin: 0px;
     padding: 0px;
@@ -17,6 +18,10 @@ span {
     font-size: 0.8em;
 }
 
+.control {
+    margin: 0px 20px 0px 0px;
+}
+
 .page {
     width: 816px;
     height: 1056px;
@@ -43,8 +48,6 @@ span {
 }
 
 #viewer {
-    background-color: #929292;
     margin: 32px 0px 0px;
     padding: 8px 0px;
-    width: 100%;
 }
index a166f7fd4af4205f846fa409acbcabb0da93d801..6afe645a10297f11c7c89cdefa6f69c2ddd7c910 100644 (file)
 </head>
 <body>
     <div id="controls">
-        <button id="previousPageButton">Previous</button>
-        <button id="nextPageButton">Next</button>
-        <input type="text" id="pageNumber" value="1" size="2"/>
-        <span>/</span>
-        <span id="numPages">--</span>
+        <span class="control">
+            <button id="previousPageButton">Previous</button>
+            <button id="nextPageButton">Next</button>
+        </span>
+        <span class="control">
+            <input type="text" id="pageNumber" value="1" size="2"/>
+            <span>/</span>
+            <span id="numPages">--</span>
+        </span>
+        <span class="control">
+            <span>Zoom</span>
+            <input type="text" id="scale" value="100" size="2"/>
+            <span>%</span>
+        </span>
     </div>
     <div id="viewer"></div>
 </body>
index 20d2e373e2c11383b8c028d11cfe7595250a6bda..c6851e70e8de943ef09426efda533541f220ef12 100644 (file)
@@ -48,7 +48,9 @@ var PDFViewer = {
     
         var div = document.createElement('div');
         div.id = 'pageContainer' + num;
-        div.className = 'page';    
+        div.className = 'page';
+        div.style.width = PDFViewer.pageWidth() + 'px';
+        div.style.height = PDFViewer.pageHeight() + 'px';
         
         PDFViewer.element.appendChild(anchor);
         PDFViewer.element.appendChild(div);
@@ -76,8 +78,8 @@ var PDFViewer = {
 
                 // Canvas dimensions must be specified in CSS pixels. CSS pixels
                 // are always 96 dpi. These dimensions are 8.5in x 11in at 96dpi.
-                canvas.width = 816;
-                canvas.height = 1056;
+                canvas.width = PDFViewer.pageWidth();
+                canvas.height = PDFViewer.pageHeight();
 
                 var ctx = canvas.getContext('2d');
                 ctx.save();
@@ -91,15 +93,67 @@ var PDFViewer = {
                 // page.compile will collect all fonts for us, once we have loaded them
                 // we can trigger the actual page rendering with page.display
                 page.compile(gfx, fonts);
-            
-                // This should be called when font loading is complete
-                page.display(gfx);
                 
+                var fontsReady = true;
+                
+                // Inspect fonts and translate the missing one
+                var fontCount = fonts.length;
+                
+                for (var i = 0; i < fontCount; i++) {
+                    var font = fonts[i];
+                    
+                    if (Fonts[font.name]) {
+                        fontsReady = fontsReady && !Fonts[font.name].loading;
+                        continue;
+                    }
+
+                    new Font(font.name, font.file, font.properties);
+                    
+                    fontsReady = false;
+                }
+
+                var pageInterval;
+                var delayLoadFont = function() {
+                    for (var i = 0; i < fontCount; i++) {
+                        if (Fonts[font.name].loading) {
+                            return;
+                        }
+                    }
+                    
+                    clearInterval(pageInterval);
+
+                    PDFViewer.drawPage(num);
+                }
+
+                if (!fontsReady) {
+                    pageInterval = setInterval(delayLoadFont, 10);
+                    return;
+                }
+
+                page.display(gfx);
                 div.appendChild(canvas);
             }
         }
     },
-  
+
+    changeScale: function(num) {
+        while (PDFViewer.element.childNodes.length > 0) {
+            PDFViewer.element.removeChild(PDFViewer.element.firstChild);
+        }
+
+        PDFViewer.scale = num / 100;
+
+        if (PDFViewer.pdf) {
+            for (var i = 1; i <= PDFViewer.numberOfPages; i++) {
+                PDFViewer.createPage(i);
+            }
+
+            if (PDFViewer.numberOfPages > 0) {
+                PDFViewer.drawPage(1);
+            }
+        }
+    },
+
     goToPage: function(num) {
         if (0 <= num && num <= PDFViewer.numberOfPages) {
             PDFViewer.pageNumber = num;
@@ -225,7 +279,13 @@ window.onload = function() {
     var nextPageButton = document.getElementById('nextPageButton');
     nextPageButton.onclick = PDFViewer.goToNextPage;
 
+    var scaleInput = document.getElementById('scale');
+    scaleInput.onchange = function(evt) {
+        PDFViewer.changeScale(this.value);
+    };
+
     PDFViewer.pageNumber = parseInt(PDFViewer.queryParams.page) || PDFViewer.pageNumber;
+    PDFViewer.scale = parseInt(scaleInput.value) / 100 || 1.0;
     PDFViewer.open(PDFViewer.queryParams.file || PDFViewer.url);
 
     window.onscroll = function(evt) {