1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-23 08:38:06 +02:00

[api-minor] Add support for OpenAction destinations (issue 10332)

Note that the OpenAction dictionary may contain other information besides just a destination array, e.g. instructions for auto-printing[1].
Given first of all that an arbitrary `Dict` cannot be sent from the Worker (since cloning would fail), and second of all that the data obviously needs to be validated, this patch purposely only adds support for fetching a destination from the OpenAction entry[2].

---
[1] This information is, currently in PDF.js, being included through the `getJavaScript` API method.

[2] This significantly reduces the complexity of the implementation, which seems fine for now. If there's ever need for other kinds of OpenAction to be fetched, additional API methods could/should be implemented as necessary (could e.g. follow the `getOpenActionWhatever` naming scheme).
This commit is contained in:
Jonas Jenwald 2018-12-05 20:09:15 +01:00
parent ba2edeae18
commit b05f053287
4 changed files with 57 additions and 0 deletions

View file

@ -392,6 +392,28 @@ class Catalog {
return shadow(this, 'pageMode', pageMode);
}
get openActionDestination() {
const obj = this.catDict.get('OpenAction');
let openActionDest = null;
if (isDict(obj)) {
// Convert the OpenAction dictionary into a format that works with
// `parseDestDictionary`, to avoid having to re-implement those checks.
const destDict = new Dict(this.xref);
destDict.set('A', obj);
const resultObj = { url: null, dest: null, };
Catalog.parseDestDictionary({ destDict, resultObj, });
if (Array.isArray(resultObj.dest)) {
openActionDest = resultObj.dest;
}
} else if (Array.isArray(obj)) {
openActionDest = obj;
}
return shadow(this, 'openActionDestination', openActionDest);
}
get attachments() {
const obj = this.catDict.get('Names');
let attachments = null;

View file

@ -531,6 +531,10 @@ var WorkerMessageHandler = {
return pdfManager.ensureCatalog('pageMode');
});
handler.on('getOpenActionDestination', function(data) {
return pdfManager.ensureCatalog('openActionDestination');
});
handler.on('GetAttachments',
function wphSetupGetAttachments(data) {
return pdfManager.ensureCatalog('attachments');

View file

@ -650,6 +650,14 @@ class PDFDocumentProxy {
return this._transport.getPageMode();
}
/**
* @return {Promise} A promise that is resolved with an {Array} containing the
* destination, or `null` when no open action is present in the PDF file.
*/
getOpenActionDestination() {
return this._transport.getOpenActionDestination();
}
/**
* @return {Promise} A promise that is resolved with a lookup table for
* mapping named attachments to their content.
@ -2152,6 +2160,11 @@ class WorkerTransport {
return this.messageHandler.sendWithPromise('GetPageMode', null);
}
getOpenActionDestination() {
return this.messageHandler.sendWithPromise('getOpenActionDestination',
null);
}
getAttachments() {
return this.messageHandler.sendWithPromise('GetAttachments', null);
}