From 681bc9d70e4aab654c6b0e8731649eef294e5304 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 23 Oct 2019 20:35:49 +0200 Subject: [PATCH] [api-minor] Support custom `offsetX`/`offsetY` values in `PDFPageProxy.getViewport` and `PageViewport.clone` There's no good reason, as far as I can tell, to not also support `offsetX`/`offsetY` in addition to e.g. `dontFlip`. --- src/display/api.js | 9 ++++++++- src/display/display_utils.js | 12 ++++++++---- test/unit/api_spec.js | 5 +++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/display/api.js b/src/display/api.js index d370069b4..5570641dc 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -805,6 +805,10 @@ class PDFDocumentProxy { * @property {number} scale - The desired scale of the viewport. * @property {number} [rotation] - The desired rotation, in degrees, of * the viewport. If omitted it defaults to the page rotation. + * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset. + * The default value is `0`. + * @property {number} [offsetY] - The vertical, i.e. y-axis, offset. + * The default value is `0`. * @property {boolean} [dontFlip] - If true, the y-axis will not be * flipped. The default value is `false`. */ @@ -958,7 +962,8 @@ class PDFPageProxy { * @returns {PageViewport} Contains 'width' and 'height' properties * along with transforms required for rendering. */ - getViewport({ scale, rotation = this.rotate, dontFlip = false, } = {}) { + getViewport({ scale, rotation = this.rotate, + offsetX = 0, offsetY = 0, dontFlip = false, } = {}) { if ((typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) && (arguments.length > 1 || typeof arguments[0] === 'number')) { throw new Error( @@ -968,6 +973,8 @@ class PDFPageProxy { viewBox: this.view, scale, rotation, + offsetX, + offsetY, dontFlip, }); } diff --git a/src/display/display_utils.js b/src/display/display_utils.js index 2cf65b23c..8c781e1d6 100644 --- a/src/display/display_utils.js +++ b/src/display/display_utils.js @@ -174,6 +174,10 @@ class DOMSVGFactory { * viewport. The default value is `this.scale`. * @property {number} [rotation] - The rotation, in degrees, overriding the one * in the cloned viewport. The default value is `this.rotation`. + * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset. + * The default value is `this.offsetX`. + * @property {number} [offsetY] - The vertical, i.e. y-axis, offset. + * The default value is `this.offsetY`. * @property {boolean} [dontFlip] - If true, the x-axis will not be flipped. * The default value is `false`. */ @@ -254,14 +258,14 @@ class PageViewport { * @param {PageViewportCloneParameters} [params] * @returns {PageViewport} Cloned viewport. */ - clone({ scale = this.scale, rotation = this.rotation, - dontFlip = false, } = {}) { + clone({ scale = this.scale, rotation = this.rotation, offsetX = this.offsetX, + offsetY = this.offsetY, dontFlip = false, } = {}) { return new PageViewport({ viewBox: this.viewBox.slice(), scale, rotation, - offsetX: this.offsetX, - offsetY: this.offsetY, + offsetX, + offsetY, dontFlip, }); } diff --git a/test/unit/api_spec.js b/test/unit/api_spec.js index 6548c8706..604128c58 100644 --- a/test/unit/api_spec.js +++ b/test/unit/api_spec.js @@ -1100,6 +1100,11 @@ describe('api', function() { expect(viewport.width).toEqual(1262.835); expect(viewport.height).toEqual(892.92); }); + it('gets viewport with "offsetX/offsetY" arguments', function () { + const viewport = page.getViewport({ scale: 1, rotation: 0, + offsetX: 100, offsetY: -100, }); + expect(viewport.transform).toEqual([1, 0, 0, -1, 100, 741.89]); + }); it('gets viewport respecting "dontFlip" argument', function () { const scale = 1, rotation = 0; let viewport = page.getViewport({ scale, rotation, });