Compare commits

..

No commits in common. "63e65665973c656b57f66b4ade379e2206855993" and "d8d3e0abf5296337f9700aee8020cc501b3edea5" have entirely different histories.

8 changed files with 79 additions and 48 deletions

View File

@ -682,7 +682,7 @@ class Catalog {
const dest = fetchDest(value);
if (dest) {
// Always let the NameTree take precedence.
dests[stringToPDFString(key)] ||= dest;
dests[key] ||= dest;
}
}
}
@ -701,12 +701,12 @@ class Catalog {
}
}
// Always fallback to checking all destinations, in order to support:
// - PDF documents with out-of-order NameTrees (fixes issue 10272).
// - Destination keys that use PDFDocEncoding (fixes issue 19835).
if (rawDests.length) {
if (rawDests[0] instanceof NameTree) {
// Fallback to checking the *entire* NameTree, in an attempt to handle
// corrupt PDF documents with out-of-order NameTrees (fixes issue 10272).
const dest = this.destinations[id];
if (dest) {
warn(`Found "${id}" at an incorrect position in the NameTree.`);
return dest;
}
}

View File

@ -1 +0,0 @@
https://github.com/user-attachments/files/19825124/AAPL-2024-09-28-10-K-d71aeb7ff955e2fc4770624610676221.pdf

View File

@ -23,14 +23,6 @@
"link": true,
"type": "other"
},
{
"id": "issue19835",
"file": "pdfs/issue19835.pdf",
"md5": "2940a2f8a41fae299b9a599b8364d05c",
"rounds": 1,
"link": true,
"type": "other"
},
{
"id": "filled-background-range",
"file": "pdfs/filled-background.pdf",

View File

@ -1399,28 +1399,6 @@ describe("api", function () {
await loadingTask.destroy();
});
it("gets a destination, from /Dests dictionary with keys using PDFDocEncoding", async function () {
if (isNodeJS) {
pending("Linked test-cases are not supported in Node.js.");
}
const loadingTask = getDocument(buildGetDocumentParams("issue19835.pdf"));
const pdfDoc = await loadingTask.promise;
const page3 = await pdfDoc.getPage(3);
const annots = await page3.getAnnotations();
const annot = annots.find(x => x.id === "22R");
// Sanity check to make sure that we found the "correct" annotation.
expect(annot.dest).toEqual(
"\u00f2\u00ab\u00d9\u0025\u006f\u2030\u0062\u2122\u0030\u00ab\u00f4\u0047\u0016\u0142\u00e8\u00bd\u2014\u0063\u00a1\u00db"
);
const dest = await pdfDoc.getDestination(annot.dest);
expect(dest).toEqual([2, { name: "XYZ" }, 34.0799999, 315.439999, 0]);
await loadingTask.destroy();
});
it("gets non-string destination", async function () {
let numberPromise = pdfDocument.getDestination(4.3);
let booleanPromise = pdfDocument.getDestination(true);

View File

@ -875,12 +875,7 @@ const PDFViewerApplication = {
},
get supportsPrinting() {
return shadow(
this,
"supportsPrinting",
AppOptions.get("supportsPrinting") &&
PDFPrintServiceFactory.supportsPrinting
);
return PDFPrintServiceFactory.supportsPrinting;
},
get supportsFullscreen() {

View File

@ -136,11 +136,6 @@ const defaultOptions = {
value: true,
kind: OptionKind.BROWSER,
},
supportsPrinting: {
/** @type {boolean} */
value: true,
kind: OptionKind.BROWSER,
},
toolbarDensity: {
/** @type {number} */
value: 0, // 0 = "normal", 1 = "compact", 2 = "touch"

View File

@ -35,7 +35,7 @@ function getXfaHtmlForPrinting(printContainer, pdfDocument) {
});
const viewport = getXfaPageViewport(xfaPage, { scale });
builder.render({ viewport, intent: "print" });
builder.render(viewport, "print");
page.append(builder.div);
}
}

View File

@ -549,6 +549,10 @@ body {
mask-image: var(--toolbarButton-zoomIn-icon);
}
#presentationMode::before {
mask-image: var(--toolbarButton-presentationMode-icon);
}
#editorFreeTextButton::before {
mask-image: var(--toolbarButton-editorFreeText-icon);
}
@ -573,10 +577,20 @@ body {
mask-image: var(--toolbarButton-print-icon);
}
/*#if GENERIC*/
#secondaryOpenFile::before {
mask-image: var(--toolbarButton-openFile-icon);
}
/*#endif*/
#downloadButton::before {
mask-image: var(--toolbarButton-download-icon);
}
#viewBookmark::before {
mask-image: var(--toolbarButton-bookmark-icon);
}
#currentOutlineItem::before {
mask-image: var(--toolbarButton-currentOutlineItem-icon);
transform: scaleX(var(--dir-factor));
@ -1651,6 +1665,64 @@ dialog :link {
}
}
#secondaryToolbar {
#firstPage::before {
mask-image: var(--secondaryToolbarButton-firstPage-icon);
}
#lastPage::before {
mask-image: var(--secondaryToolbarButton-lastPage-icon);
}
#pageRotateCcw::before {
mask-image: var(--secondaryToolbarButton-rotateCcw-icon);
}
#pageRotateCw::before {
mask-image: var(--secondaryToolbarButton-rotateCw-icon);
}
#cursorSelectTool::before {
mask-image: var(--secondaryToolbarButton-selectTool-icon);
}
#cursorHandTool::before {
mask-image: var(--secondaryToolbarButton-handTool-icon);
}
#scrollPage::before {
mask-image: var(--secondaryToolbarButton-scrollPage-icon);
}
#scrollVertical::before {
mask-image: var(--secondaryToolbarButton-scrollVertical-icon);
}
#scrollHorizontal::before {
mask-image: var(--secondaryToolbarButton-scrollHorizontal-icon);
}
#scrollWrapped::before {
mask-image: var(--secondaryToolbarButton-scrollWrapped-icon);
}
#spreadNone::before {
mask-image: var(--secondaryToolbarButton-spreadNone-icon);
}
#spreadOdd::before {
mask-image: var(--secondaryToolbarButton-spreadOdd-icon);
}
#spreadEven::before {
mask-image: var(--secondaryToolbarButton-spreadEven-icon);
}
#documentProperties::before {
mask-image: var(--secondaryToolbarButton-documentProperties-icon);
}
}
@media all and (max-width: 840px) {
#sidebarContainer {
background-color: var(--sidebar-narrow-bg-color);