From b6983f7776c0f15d760afd1871badf253ed2cd5b Mon Sep 17 00:00:00 2001 From: Pdf Bot Date: Wed, 28 Oct 2015 22:36:05 +0000 Subject: [PATCH] PDF.js version 1.2.38 - See mozilla/pdf.js@335aeb2e3749993efe9ad85a21cffa65dc0a2369 --- bower.json | 2 +- build/pdf.combined.js | 4 +-- build/pdf.js | 4 +-- build/pdf.worker.js | 4 +-- package.json | 2 +- web/pdf_viewer.js | 61 +++++++++++++++++++++++++++++++++++++++---- 6 files changed, 64 insertions(+), 13 deletions(-) diff --git a/bower.json b/bower.json index adabff083..0c5e7dba6 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "pdfjs-dist", - "version": "1.2.36", + "version": "1.2.38", "main": [ "build/pdf.js", "build/pdf.worker.js" diff --git a/build/pdf.combined.js b/build/pdf.combined.js index f2dedbf54..d71b91adc 100644 --- a/build/pdf.combined.js +++ b/build/pdf.combined.js @@ -22,8 +22,8 @@ if (typeof PDFJS === 'undefined') { (typeof window !== 'undefined' ? window : this).PDFJS = {}; } -PDFJS.version = '1.2.36'; -PDFJS.build = 'd26ef21'; +PDFJS.version = '1.2.38'; +PDFJS.build = '335aeb2'; (function pdfjsWrapper() { // Use strict in our context only - users might not want it diff --git a/build/pdf.js b/build/pdf.js index 1bd059006..1b8e6ed58 100644 --- a/build/pdf.js +++ b/build/pdf.js @@ -22,8 +22,8 @@ if (typeof PDFJS === 'undefined') { (typeof window !== 'undefined' ? window : this).PDFJS = {}; } -PDFJS.version = '1.2.36'; -PDFJS.build = 'd26ef21'; +PDFJS.version = '1.2.38'; +PDFJS.build = '335aeb2'; (function pdfjsWrapper() { // Use strict in our context only - users might not want it diff --git a/build/pdf.worker.js b/build/pdf.worker.js index fb94ade7b..d46e05d54 100644 --- a/build/pdf.worker.js +++ b/build/pdf.worker.js @@ -22,8 +22,8 @@ if (typeof PDFJS === 'undefined') { (typeof window !== 'undefined' ? window : this).PDFJS = {}; } -PDFJS.version = '1.2.36'; -PDFJS.build = 'd26ef21'; +PDFJS.version = '1.2.38'; +PDFJS.build = '335aeb2'; (function pdfjsWrapper() { // Use strict in our context only - users might not want it diff --git a/package.json b/package.json index 6d236f092..5a8d67321 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pdfjs-dist", - "version": "1.2.36", + "version": "1.2.38", "description": "Generic build of Mozilla's PDF.js library.", "keywords": [ "Mozilla", diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js index f259c044c..1c91dff79 100644 --- a/web/pdf_viewer.js +++ b/web/pdf_viewer.js @@ -249,6 +249,55 @@ function binarySearchFirstItem(items, condition) { return minIndex; /* === maxIndex */ } +/** + * Approximates float number as a fraction using Farey sequence (max order + * of 8). + * @param {number} x - Positive float number. + * @returns {Array} Estimated fraction: the first array item is a numerator, + * the second one is a denominator. + */ +function approximateFraction(x) { + // Fast paths for int numbers or their inversions. + if (Math.floor(x) === x) { + return [x, 1]; + } + var xinv = 1 / x; + var limit = 8; + if (xinv > limit) { + return [1, limit]; + } else if (Math.floor(xinv) === xinv) { + return [1, xinv]; + } + + var x_ = x > 1 ? xinv : x; + // a/b and c/d are neighbours in Farey sequence. + var a = 0, b = 1, c = 1, d = 1; + // Limiting search to order 8. + while (true) { + // Generating next term in sequence (order of q). + var p = a + c, q = b + d; + if (q > limit) { + break; + } + if (x_ <= p / q) { + c = p; d = q; + } else { + a = p; b = q; + } + } + // Select closest of the neighbours to x. + if (x_ - a / b < c / d - x_) { + return x_ === x ? [a, b] : [b, a]; + } else { + return x_ === x ? [c, d] : [d, c]; + } +} + +function roundToDivide(x, div) { + var r = x % div; + return r === 0 ? x : Math.round(x - r + div); +} + /** * Generic helper to find out what elements are visible within a scroll pane. */ @@ -1186,7 +1235,7 @@ var PDFPageView = (function PDFPageViewClosure() { var outputScale = getOutputScale(ctx); if (PDFJS.useOnlyCssZoom) { - var actualSizeViewport = viewport.clone({ scale: CSS_UNITS }); + var actualSizeViewport = viewport.clone({scale: CSS_UNITS}); // Use a scale that will make the canvas be the original intended size // of the page. outputScale.sx *= actualSizeViewport.width / viewport.width; @@ -1207,10 +1256,12 @@ var PDFPageView = (function PDFPageViewClosure() { } } - canvas.width = (Math.floor(viewport.width) * outputScale.sx) | 0; - canvas.height = (Math.floor(viewport.height) * outputScale.sy) | 0; - canvas.style.width = Math.floor(viewport.width) + 'px'; - canvas.style.height = Math.floor(viewport.height) + 'px'; + var sfx = approximateFraction(outputScale.sx); + var sfy = approximateFraction(outputScale.sy); + canvas.width = roundToDivide(viewport.width * outputScale.sx, sfx[0]); + canvas.height = roundToDivide(viewport.height * outputScale.sy, sfy[0]); + canvas.style.width = roundToDivide(viewport.width, sfx[1]) + 'px'; + canvas.style.height = roundToDivide(viewport.height, sfy[1]) + 'px'; // Add the viewport so it's known what it was originally drawn with. canvas._viewport = viewport;