1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-22 16:18:08 +02:00

Merge pull request #17847 from Snuffleupagus/issue-17846

Add better support for /Launch actions with /FileSpec dictionaries (issue 17846)
This commit is contained in:
Tim van der Meij 2024-03-28 13:03:01 +01:00 committed by GitHub
commit 55db43966e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 38 additions and 9 deletions

View file

@ -1568,9 +1568,13 @@ class Catalog {
case "GoToR":
const urlDict = action.get("F");
if (urlDict instanceof Dict) {
// We assume that we found a FileSpec dictionary
// and fetch the URL without checking any further.
url = urlDict.get("F") || null;
const fs = new FileSpec(
urlDict,
/* xref = */ null,
/* skipContent = */ true
);
const { filename } = fs.serializable;
url = filename;
} else if (typeof urlDict === "string") {
url = urlDict;
}

View file

@ -42,7 +42,9 @@ function pickPlatformItem(dict) {
* collections attributes and related files (/RF)
*/
class FileSpec {
constructor(root, xref) {
#contentAvailable = false;
constructor(root, xref, skipContent = false) {
if (!(root instanceof Dict)) {
return;
}
@ -57,10 +59,12 @@ class FileSpec {
if (root.has("RF")) {
warn("Related file specifications are not supported");
}
this.contentAvailable = true;
if (!root.has("EF")) {
this.contentAvailable = false;
warn("Non-embedded file specifications are not supported");
if (!skipContent) {
if (root.has("EF")) {
this.#contentAvailable = true;
} else {
warn("Non-embedded file specifications are not supported");
}
}
}
@ -76,7 +80,7 @@ class FileSpec {
}
get content() {
if (!this.contentAvailable) {
if (!this.#contentAvailable) {
return null;
}
if (!this.contentRef && this.root) {