Merge pull request #10369 from Snuffleupagus/getViewport-signature

[api-minor] Change the `getViewport` method, on `PDFPageProxy`, to take a parameter object rather than a bunch of (randomly) ordered parameters
This commit is contained in:
Tim van der Meij 2018-12-22 14:56:16 +01:00 committed by GitHub
commit 98b4aff291
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 54 additions and 38 deletions

View File

@ -37,7 +37,7 @@ loadingTask.promise.then(function(doc) {
container: container, container: container,
id: pageNum, id: pageNum,
scale: DEFAULT_SCALE, scale: DEFAULT_SCALE,
defaultViewport: pdfPage.getViewport(DEFAULT_SCALE), defaultViewport: pdfPage.getViewport({ scale: DEFAULT_SCALE, }),
annotationLayerFactory: annotationLayerFactory:
new pdfjsViewer.DefaultAnnotationLayerFactory(), new pdfjsViewer.DefaultAnnotationLayerFactory(),
renderInteractiveForms: true, renderInteractiveForms: true,

View File

@ -17,7 +17,7 @@ loadingTask.promise.then(function (pdfDocument) {
// Request a first page // Request a first page
return pdfDocument.getPage(1).then(function (pdfPage) { return pdfDocument.getPage(1).then(function (pdfPage) {
// Display page on the existing canvas with 100% scale. // Display page on the existing canvas with 100% scale.
var viewport = pdfPage.getViewport(1.0); var viewport = pdfPage.getViewport({ scale: 1.0, });
var canvas = document.getElementById('theCanvas'); var canvas = document.getElementById('theCanvas');
canvas.width = viewport.width; canvas.width = viewport.width;
canvas.height = viewport.height; canvas.height = viewport.height;

View File

@ -50,7 +50,7 @@ loadingTask.promise.then(function(pdfDocument) {
container: container, container: container,
id: PAGE_TO_VIEW, id: PAGE_TO_VIEW,
scale: SCALE, scale: SCALE,
defaultViewport: pdfPage.getViewport(SCALE), defaultViewport: pdfPage.getViewport({ scale: SCALE, }),
// We can enable text/annotations layers, if needed // We can enable text/annotations layers, if needed
textLayerFactory: new pdfjsViewer.DefaultTextLayerFactory(), textLayerFactory: new pdfjsViewer.DefaultTextLayerFactory(),
annotationLayerFactory: new pdfjsViewer.DefaultAnnotationLayerFactory(), annotationLayerFactory: new pdfjsViewer.DefaultAnnotationLayerFactory(),

View File

@ -38,7 +38,7 @@ loadingTask.promise.then(function(doc) {
var loadPage = function (pageNum) { var loadPage = function (pageNum) {
return doc.getPage(pageNum).then(function (page) { return doc.getPage(pageNum).then(function (page) {
console.log('# Page ' + pageNum); console.log('# Page ' + pageNum);
var viewport = page.getViewport(1.0 /* scale */); var viewport = page.getViewport({ scale: 1.0, });
console.log('Size: ' + viewport.width + 'x' + viewport.height); console.log('Size: ' + viewport.width + 'x' + viewport.height);
console.log(); console.log();
return page.getTextContent().then(function (content) { return page.getTextContent().then(function (content) {

View File

@ -64,7 +64,7 @@ loadingTask.promise.then(function(pdfDocument) {
// Get the first page. // Get the first page.
pdfDocument.getPage(1).then(function (page) { pdfDocument.getPage(1).then(function (page) {
// Render the page on a Node canvas with 100% scale. // Render the page on a Node canvas with 100% scale.
var viewport = page.getViewport(1.0); var viewport = page.getViewport({ scale: 1.0, });
var canvasFactory = new NodeCanvasFactory(); var canvasFactory = new NodeCanvasFactory();
var canvasAndContext = var canvasAndContext =
canvasFactory.create(viewport.width, viewport.height); canvasFactory.create(viewport.width, viewport.height);

View File

@ -100,7 +100,7 @@ loadingTask.promise.then(function(doc) {
var loadPage = function (pageNum) { var loadPage = function (pageNum) {
return doc.getPage(pageNum).then(function (page) { return doc.getPage(pageNum).then(function (page) {
console.log('# Page ' + pageNum); console.log('# Page ' + pageNum);
var viewport = page.getViewport(1.0 /* scale */); var viewport = page.getViewport({ scale: 1.0, });
console.log('Size: ' + viewport.width + 'x' + viewport.height); console.log('Size: ' + viewport.width + 'x' + viewport.height);
console.log(); console.log();

View File

@ -52,7 +52,7 @@ function pageLoaded() {
var loadingTask = pdfjsLib.getDocument({ url: PDF_PATH, }); var loadingTask = pdfjsLib.getDocument({ url: PDF_PATH, });
loadingTask.promise.then(function(pdfDocument) { loadingTask.promise.then(function(pdfDocument) {
pdfDocument.getPage(PAGE_NUMBER).then(function (page) { pdfDocument.getPage(PAGE_NUMBER).then(function (page) {
var viewport = page.getViewport(PAGE_SCALE); var viewport = page.getViewport({ scale: PAGE_SCALE, });
page.getTextContent().then(function (textContent) { page.getTextContent().then(function (textContent) {
// building SVG and adding that to the DOM // building SVG and adding that to the DOM
var svg = buildSVG(viewport, textContent); var svg = buildSVG(viewport, textContent);

View File

@ -17,7 +17,7 @@ loadingTask.promise.then(function (pdfDocument) {
// Request a first page // Request a first page
return pdfDocument.getPage(1).then(function (pdfPage) { return pdfDocument.getPage(1).then(function (pdfPage) {
// Display page on the existing canvas with 100% scale. // Display page on the existing canvas with 100% scale.
var viewport = pdfPage.getViewport(1.0); var viewport = pdfPage.getViewport({ scale: 1.0, });
var canvas = document.getElementById('theCanvas'); var canvas = document.getElementById('theCanvas');
canvas.width = viewport.width; canvas.width = viewport.width;
canvas.height = viewport.height; canvas.height = viewport.height;

View File

@ -755,6 +755,17 @@ class PDFDocumentProxy {
} }
} }
/**
* Page getViewport parameters.
*
* @typedef {Object} GetViewportParameters
* @property {number} scale - The desired scale of the viewport.
* @property {number} rotation - (optional) The desired rotation, in degrees, of
* the viewport. If omitted it defaults to the page rotation.
* @property {boolean} dontFlip - (optional) If true, the y-axis will not be
* flipped. The default value is `false`.
*/
/** /**
* Page getTextContent parameters. * Page getTextContent parameters.
* *
@ -811,7 +822,7 @@ class PDFDocumentProxy {
* @typedef {Object} RenderParameters * @typedef {Object} RenderParameters
* @property {Object} canvasContext - A 2D context of a DOM Canvas object. * @property {Object} canvasContext - A 2D context of a DOM Canvas object.
* @property {PageViewport} viewport - Rendering viewport obtained by * @property {PageViewport} viewport - Rendering viewport obtained by
* calling of PDFPage.getViewport method. * calling the `PDFPageProxy.getViewport` method.
* @property {string} intent - Rendering intent, can be 'display' or 'print' * @property {string} intent - Rendering intent, can be 'display' or 'print'
* (default value is 'display'). * (default value is 'display').
* @property {boolean} enableWebGL - (optional) Enables WebGL accelerated * @property {boolean} enableWebGL - (optional) Enables WebGL accelerated
@ -900,18 +911,22 @@ class PDFPageProxy {
} }
/** /**
* @param {number} scale The desired scale of the viewport. * @param {GetViewportParameters} params - Viewport parameters.
* @param {number} rotate Degrees to rotate the viewport. If omitted this
* defaults to the page rotation.
* @param {boolean} dontFlip (optional) If true, axis Y will not be flipped.
* @return {PageViewport} Contains 'width' and 'height' properties * @return {PageViewport} Contains 'width' and 'height' properties
* along with transforms required for rendering. * along with transforms required for rendering.
*/ */
getViewport(scale, rotate = this.rotate, dontFlip = false) { getViewport({ scale, rotation = this.rotate, dontFlip = false, } = {}) {
if ((typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) &&
(arguments.length > 1 || typeof arguments[0] === 'number')) {
deprecated('getViewport is called with obsolete arguments.');
scale = arguments[0];
rotation = typeof arguments[1] === 'number' ? arguments[1] : this.rotate;
dontFlip = typeof arguments[2] === 'boolean' ? arguments[2] : false;
}
return new PageViewport({ return new PageViewport({
viewBox: this.view, viewBox: this.view,
scale, scale,
rotation: rotate, rotation,
dontFlip, dontFlip,
}); });
} }

View File

@ -140,11 +140,11 @@ class DOMSVGFactory {
* @property {Array} viewBox - The xMin, yMin, xMax and yMax coordinates. * @property {Array} viewBox - The xMin, yMin, xMax and yMax coordinates.
* @property {number} scale - The scale of the viewport. * @property {number} scale - The scale of the viewport.
* @property {number} rotation - The rotation, in degrees, of the viewport. * @property {number} rotation - The rotation, in degrees, of the viewport.
* @property {number} offsetX - (optional) The vertical, i.e. x-axis, offset. * @property {number} offsetX - (optional) The horizontal, i.e. x-axis, offset.
* The default value is `0`. * The default value is `0`.
* @property {number} offsetY - (optional) The horizontal, i.e. y-axis, offset. * @property {number} offsetY - (optional) The vertical, i.e. y-axis, offset.
* The default value is `0`. * The default value is `0`.
* @property {boolean} dontFlip - (optional) If true, the x-axis will not be * @property {boolean} dontFlip - (optional) If true, the y-axis will not be
* flipped. The default value is `false`. * flipped. The default value is `false`.
*/ */

View File

@ -471,7 +471,7 @@ var Driver = (function DriverClosure() { // eslint-disable-line no-unused-vars
this.canvas.mozOpaque = true; this.canvas.mozOpaque = true;
ctx = this.canvas.getContext('2d', { alpha: false, }); ctx = this.canvas.getContext('2d', { alpha: false, });
task.pdfDoc.getPage(task.pageNum).then(function(page) { task.pdfDoc.getPage(task.pageNum).then(function(page) {
var viewport = page.getViewport(PDF_TO_CSS_UNITS); var viewport = page.getViewport({ scale: PDF_TO_CSS_UNITS, });
self.canvas.width = viewport.width; self.canvas.width = viewport.width;
self.canvas.height = viewport.height; self.canvas.height = viewport.height;
self._clearCanvas(); self._clearCanvas();

View File

@ -1034,7 +1034,7 @@ describe('api', function() {
expect(page.view).toEqual([0, 0, 595.28, 841.89]); expect(page.view).toEqual([0, 0, 595.28, 841.89]);
}); });
it('gets viewport', function () { it('gets viewport', function () {
var viewport = page.getViewport(1.5, 90); var viewport = page.getViewport({ scale: 1.5, rotation: 90, });
expect(viewport.viewBox).toEqual(page.view); expect(viewport.viewBox).toEqual(page.view);
expect(viewport.scale).toEqual(1.5); expect(viewport.scale).toEqual(1.5);
expect(viewport.rotation).toEqual(90); expect(viewport.rotation).toEqual(90);
@ -1045,8 +1045,9 @@ describe('api', function() {
it('gets viewport respecting "dontFlip" argument', function () { it('gets viewport respecting "dontFlip" argument', function () {
const scale = 1; const scale = 1;
const rotation = 135; const rotation = 135;
let viewport = page.getViewport(scale, rotation); let viewport = page.getViewport({ scale, rotation, });
let dontFlipViewport = page.getViewport(scale, rotation, true); let dontFlipViewport = page.getViewport({ scale, rotation,
dontFlip: true, });
expect(dontFlipViewport).not.toEqual(viewport); expect(dontFlipViewport).not.toEqual(viewport);
expect(dontFlipViewport).toEqual(viewport.clone({ dontFlip: true, })); expect(dontFlipViewport).toEqual(viewport.clone({ dontFlip: true, }));
@ -1239,7 +1240,7 @@ describe('api', function() {
loadingTask.promise.then((pdfDoc) => { loadingTask.promise.then((pdfDoc) => {
return pdfDoc.getPage(1).then((pdfPage) => { return pdfDoc.getPage(1).then((pdfPage) => {
let viewport = pdfPage.getViewport(1); let viewport = pdfPage.getViewport({ scale: 1, });
canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height); canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height);
let renderTask = pdfPage.render({ let renderTask = pdfPage.render({
@ -1273,7 +1274,7 @@ describe('api', function() {
if (isNodeJS()) { if (isNodeJS()) {
pending('TODO: Support Canvas testing in Node.js.'); pending('TODO: Support Canvas testing in Node.js.');
} }
var viewport = page.getViewport(1); var viewport = page.getViewport({ scale: 1, });
var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height); var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height);
var renderTask = page.render({ var renderTask = page.render({
@ -1297,7 +1298,7 @@ describe('api', function() {
if (isNodeJS()) { if (isNodeJS()) {
pending('TODO: Support Canvas testing in Node.js.'); pending('TODO: Support Canvas testing in Node.js.');
} }
let viewport = page.getViewport(1); let viewport = page.getViewport({ scale: 1, });
let canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height); let canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height);
let renderTask = page.render({ let renderTask = page.render({
@ -1326,7 +1327,7 @@ describe('api', function() {
if (isNodeJS()) { if (isNodeJS()) {
pending('TODO: Support Canvas testing in Node.js.'); pending('TODO: Support Canvas testing in Node.js.');
} }
var viewport = page.getViewport(1); var viewport = page.getViewport({ scale: 1, });
var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height); var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height);
var renderTask1 = page.render({ var renderTask1 = page.render({
@ -1368,7 +1369,7 @@ describe('api', function() {
const pdf = await loadingTask.promise; const pdf = await loadingTask.promise;
pdfDocuments.push(pdf); pdfDocuments.push(pdf);
const page = await pdf.getPage(1); const page = await pdf.getPage(1);
const viewport = page.getViewport(1.2); const viewport = page.getViewport({ scale: 1.2, });
const canvasAndCtx = CanvasFactory.create(viewport.width, const canvasAndCtx = CanvasFactory.create(viewport.width,
viewport.height); viewport.height);
const renderTask = page.render({ const renderTask = page.render({

View File

@ -61,7 +61,7 @@ describe('custom canvas rendering', function() {
if (isNodeJS()) { if (isNodeJS()) {
pending('TODO: Support Canvas testing in Node.js.'); pending('TODO: Support Canvas testing in Node.js.');
} }
var viewport = page.getViewport(1); var viewport = page.getViewport({ scale: 1, });
var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height); var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height);
const renderTask = page.render({ const renderTask = page.render({
@ -80,7 +80,7 @@ describe('custom canvas rendering', function() {
if (isNodeJS()) { if (isNodeJS()) {
pending('TODO: Support Canvas testing in Node.js.'); pending('TODO: Support Canvas testing in Node.js.');
} }
var viewport = page.getViewport(1); var viewport = page.getViewport({ scale: 1, });
var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height); var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height);
const renderTask = page.render({ const renderTask = page.render({

View File

@ -419,7 +419,7 @@ class BaseViewer {
// viewport for all pages // viewport for all pages
firstPagePromise.then((pdfPage) => { firstPagePromise.then((pdfPage) => {
let scale = this.currentScale; let scale = this.currentScale;
let viewport = pdfPage.getViewport(scale * CSS_UNITS); let viewport = pdfPage.getViewport({ scale: scale * CSS_UNITS, });
for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
let textLayerFactory = null; let textLayerFactory = null;
if (this.textLayerMode !== TextLayerMode.DISABLE) { if (this.textLayerMode !== TextLayerMode.DISABLE) {
@ -1031,7 +1031,7 @@ class BaseViewer {
*/ */
getPagesOverview() { getPagesOverview() {
let pagesOverview = this._pages.map(function(pageView) { let pagesOverview = this._pages.map(function(pageView) {
let viewport = pageView.pdfPage.getViewport(1); let viewport = pageView.pdfPage.getViewport({ scale: 1, });
return { return {
width: viewport.width, width: viewport.width,
height: viewport.height, height: viewport.height,

View File

@ -48,7 +48,7 @@ function composePage(pdfDocument, pageNumber, size, printContainer) {
let renderContext = { let renderContext = {
canvasContext: ctx, canvasContext: ctx,
transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0], transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0],
viewport: pdfPage.getViewport(1, size.rotation), viewport: pdfPage.getViewport({ scale: 1, rotation: size.rotation, }),
intent: 'print', intent: 'print',
}; };
return pdfPage.render(renderContext).promise; return pdfPage.render(renderContext).promise;

View File

@ -118,8 +118,8 @@ class PDFPageView {
this.pdfPageRotate = pdfPage.rotate; this.pdfPageRotate = pdfPage.rotate;
let totalRotation = (this.rotation + this.pdfPageRotate) % 360; let totalRotation = (this.rotation + this.pdfPageRotate) % 360;
this.viewport = pdfPage.getViewport(this.scale * CSS_UNITS, this.viewport = pdfPage.getViewport({ scale: this.scale * CSS_UNITS,
totalRotation); rotation: totalRotation, });
this.stats = pdfPage.stats; this.stats = pdfPage.stats;
this.reset(); this.reset();
} }

View File

@ -45,7 +45,7 @@ function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) {
let renderContext = { let renderContext = {
canvasContext: ctx, canvasContext: ctx,
transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0], transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0],
viewport: pdfPage.getViewport(1, size.rotation), viewport: pdfPage.getViewport({ scale: 1, rotation: size.rotation, }),
intent: 'print', intent: 'print',
}; };
return pdfPage.render(renderContext).promise; return pdfPage.render(renderContext).promise;

View File

@ -146,7 +146,7 @@ class PDFThumbnailView {
this.pdfPage = pdfPage; this.pdfPage = pdfPage;
this.pdfPageRotate = pdfPage.rotate; this.pdfPageRotate = pdfPage.rotate;
let totalRotation = (this.rotation + this.pdfPageRotate) % 360; let totalRotation = (this.rotation + this.pdfPageRotate) % 360;
this.viewport = pdfPage.getViewport(1, totalRotation); this.viewport = pdfPage.getViewport({ scale: 1, rotation: totalRotation, });
this.reset(); this.reset();
} }

View File

@ -166,7 +166,7 @@ class PDFThumbnailViewer {
pdfDocument.getPage(1).then((firstPage) => { pdfDocument.getPage(1).then((firstPage) => {
let pagesCount = pdfDocument.numPages; let pagesCount = pdfDocument.numPages;
let viewport = firstPage.getViewport(1.0); let viewport = firstPage.getViewport({ scale: 1, });
for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
let thumbnail = new PDFThumbnailView({ let thumbnail = new PDFThumbnailView({
container: this.container, container: this.container,