From 16c5d41c5b45bee7d8e5733e7ea0157470dcaa6d Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Tue, 18 Jul 2017 13:08:02 +0200 Subject: [PATCH] [api-minor] Add support for PageMode in the API (issue 8657) Please refer to https://wwwimages2.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf#page=82. --- src/core/obj.js | 18 ++++++++++++++++++ src/core/worker.js | 4 ++++ src/display/api.js | 11 +++++++++++ test/unit/api_spec.js | 22 ++++++++++++++++++++++ 4 files changed, 55 insertions(+) diff --git a/src/core/obj.js b/src/core/obj.js index 3581e57aa..d7e67e8ad 100644 --- a/src/core/obj.js +++ b/src/core/obj.js @@ -313,6 +313,24 @@ var Catalog = (function CatalogClosure() { return pageLabels; }, + get pageMode() { + let obj = this.catDict.get('PageMode'); + let pageMode = 'UseNone'; // Default value. + + if (isName(obj)) { + switch (obj.name) { + case 'UseNone': + case 'UseOutlines': + case 'UseThumbs': + case 'FullScreen': + case 'UseOC': + case 'UseAttachments': + pageMode = obj.name; + } + } + return shadow(this, 'pageMode', pageMode); + }, + get attachments() { var xref = this.xref; var attachments = null, nameTreeRef; diff --git a/src/core/worker.js b/src/core/worker.js index f3dcecdd6..fc3ce3c60 100644 --- a/src/core/worker.js +++ b/src/core/worker.js @@ -770,6 +770,10 @@ var WorkerMessageHandler = { } ); + handler.on('GetPageMode', function wphSetupGetPageMode(data) { + return pdfManager.ensureCatalog('pageMode'); + }); + handler.on('GetAttachments', function wphSetupGetAttachments(data) { return pdfManager.ensureCatalog('attachments'); diff --git a/src/display/api.js b/src/display/api.js index b3c6d234d..b2c86e361 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -568,6 +568,13 @@ var PDFDocumentProxy = (function PDFDocumentProxyClosure() { getPageLabels: function PDFDocumentProxy_getPageLabels() { return this.transport.getPageLabels(); }, + /** + * @return {Promise} A promise that is resolved with a {string} containing + * the PageMode name. + */ + getPageMode() { + return this.transport.getPageMode(); + }, /** * @return {Promise} A promise that is resolved with a lookup table for * mapping named attachments to their content. @@ -1939,6 +1946,10 @@ var WorkerTransport = (function WorkerTransportClosure() { return this.messageHandler.sendWithPromise('GetPageLabels', null); }, + getPageMode() { + return this.messageHandler.sendWithPromise('GetPageMode', null); + }, + getAttachments: function WorkerTransport_getAttachments() { return this.messageHandler.sendWithPromise('GetAttachments', null); }, diff --git a/test/unit/api_spec.js b/test/unit/api_spec.js index d6d3d690c..35336a956 100644 --- a/test/unit/api_spec.js +++ b/test/unit/api_spec.js @@ -630,6 +630,28 @@ describe('api', function() { }); }); + it('gets default page mode', function(done) { + var loadingTask = getDocument(buildGetDocumentParams('tracemonkey.pdf')); + + loadingTask.promise.then(function(pdfDocument) { + return pdfDocument.getPageMode(); + }).then(function(mode) { + expect(mode).toEqual('UseNone'); + + loadingTask.destroy().then(done); + }).catch(function (reason) { + done.fail(reason); + }); + }); + it('gets non-default page mode', function(done) { + doc.getPageMode().then(function(mode) { + expect(mode).toEqual('UseOutlines'); + done(); + }).catch(function(reason) { + done.fail(reason); + }); + }); + it('gets non-existent attachments', function(done) { var promise = doc.getAttachments(); promise.then(function (data) {