[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.
This commit is contained in:
Jonas Jenwald 2017-07-18 13:08:02 +02:00
parent 4a74cc418c
commit 16c5d41c5b
4 changed files with 55 additions and 0 deletions

View File

@ -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;

View File

@ -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');

View File

@ -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);
},

View File

@ -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) {