From ddba096191117517d90104786975d97d806ec5ca Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Wed, 4 Sep 2024 16:45:09 +0200 Subject: [PATCH] Make tagged images visible for screen readers (bug 1708040) The idea is to insert a span in the text layer with an aria-role set to img and use the bounding box provided by the attribute field in the tag dict in order to have non-null dimensions for the image to make it "visible". --- src/core/struct_tree.js | 32 ++++++++++- src/display/editor/annotation_editor_layer.js | 5 +- test/integration/accessibility_spec.mjs | 40 +++++++++++++ test/integration/highlight_editor_spec.mjs | 47 +++++++++++++++ test/pdfs/.gitignore | 1 + test/pdfs/bug1708040.pdf | Bin 0 -> 70324 bytes test/unit/api_spec.js | 2 + test/unit/struct_tree_spec.js | 44 ++++++++++++++ web/annotation_editor_layer_builder.css | 4 ++ web/pdf_page_view.js | 16 ++++-- web/struct_tree_layer_builder.js | 54 +++++++++++++++++- web/text_layer_builder.css | 5 ++ 12 files changed, 240 insertions(+), 10 deletions(-) create mode 100755 test/pdfs/bug1708040.pdf diff --git a/src/core/struct_tree.js b/src/core/struct_tree.js index 49be8eabfb9ed..f11d4b964a90e 100644 --- a/src/core/struct_tree.js +++ b/src/core/struct_tree.js @@ -15,8 +15,8 @@ import { AnnotationPrefix, stringToPDFString, warn } from "../shared/util.js"; import { Dict, isName, Name, Ref, RefSetCache } from "./primitives.js"; +import { lookupNormalRect, stringToAsciiOrUTF16BE } from "./core_utils.js"; import { NumberTree } from "./name_number_tree.js"; -import { stringToAsciiOrUTF16BE } from "./core_utils.js"; import { writeObject } from "./writer.js"; const MAX_DEPTH = 40; @@ -751,10 +751,38 @@ class StructTreePage { obj.role = node.role; obj.children = []; parent.children.push(obj); - const alt = node.dict.get("Alt"); + let alt = node.dict.get("Alt"); + if (typeof alt !== "string") { + alt = node.dict.get("ActualText"); + } if (typeof alt === "string") { obj.alt = stringToPDFString(alt); } + + const a = node.dict.get("A"); + if (a instanceof Dict) { + const bbox = lookupNormalRect(a.getArray("BBox"), null); + if (bbox) { + obj.bbox = bbox; + } else { + const width = a.get("Width"); + const height = a.get("Height"); + if ( + typeof width === "number" && + width > 0 && + typeof height === "number" && + height > 0 + ) { + obj.bbox = [0, 0, width, height]; + } + } + // TODO: If the bbox is not available, we should try to get it from + // the content stream. + // For example when rendering on the canvas the commands between the + // beginning and the end of the marked-content sequence, we can + // compute the overall bbox. + } + const lang = node.dict.get("Lang"); if (typeof lang === "string") { obj.lang = stringToPDFString(lang); diff --git a/src/display/editor/annotation_editor_layer.js b/src/display/editor/annotation_editor_layer.js index 5bd3e778c7dd4..d25e97d2b6f1e 100644 --- a/src/display/editor/annotation_editor_layer.js +++ b/src/display/editor/annotation_editor_layer.js @@ -395,7 +395,8 @@ class AnnotationEditorLayer { const { target } = event; if ( target === this.#textLayer.div || - (target.classList.contains("endOfContent") && + ((target.getAttribute("role") === "img" || + target.classList.contains("endOfContent")) && this.#textLayer.div.contains(target)) ) { const { isMac } = FeatureTest.platform; @@ -413,7 +414,7 @@ class AnnotationEditorLayer { HighlightEditor.startHighlighting( this, this.#uiManager.direction === "ltr", - event + { target: this.#textLayer.div, x: event.x, y: event.y } ); this.#textLayer.div.addEventListener( "pointerup", diff --git a/test/integration/accessibility_spec.mjs b/test/integration/accessibility_spec.mjs index ed7414ebb0db6..f3e8e39cb4246 100644 --- a/test/integration/accessibility_spec.mjs +++ b/test/integration/accessibility_spec.mjs @@ -241,4 +241,44 @@ describe("accessibility", () => { ); }); }); + + describe("Figure in the content stream", () => { + let pages; + + beforeAll(async () => { + pages = await loadAndWait("bug1708040.pdf", ".textLayer"); + }); + + afterAll(async () => { + await closePages(pages); + }); + + it("must check that an image is correctly inserted in the text layer", async () => { + await Promise.all( + pages.map(async ([browserName, page]) => { + expect(await isStructTreeVisible(page)) + .withContext(`In ${browserName}`) + .toBeTrue(); + + const spanId = await page.evaluate(() => { + const el = document.querySelector( + `.structTree span[role="figure"]` + ); + return el.getAttribute("aria-owns") || null; + }); + + expect(spanId).withContext(`In ${browserName}`).not.toBeNull(); + + const ariaLabel = await page.evaluate(id => { + const img = document.querySelector(`#${id} > span[role="img"]`); + return img.getAttribute("aria-label"); + }, spanId); + + expect(ariaLabel) + .withContext(`In ${browserName}`) + .toEqual("A logo of a fox and a globe"); + }) + ); + }); + }); }); diff --git a/test/integration/highlight_editor_spec.mjs b/test/integration/highlight_editor_spec.mjs index 31379b6c89fa5..6a7c820e2aed7 100644 --- a/test/integration/highlight_editor_spec.mjs +++ b/test/integration/highlight_editor_spec.mjs @@ -2053,4 +2053,51 @@ describe("Highlight Editor", () => { ); }); }); + + describe("Free Highlight with an image in the struct tree", () => { + let pages; + + beforeAll(async () => { + pages = await loadAndWait( + "bug1708040.pdf", + ".annotationEditorLayer", + null, + null, + { highlightEditorColors: "red=#AB0000" } + ); + }); + + afterAll(async () => { + await closePages(pages); + }); + + it("must check that it's possible to draw on an image in a struct tree", async () => { + await Promise.all( + pages.map(async ([browserName, page]) => { + await switchToHighlight(page); + + const rect = await getRect(page, `.textLayer span[role="img"]`); + + const x = rect.x + rect.width / 2; + const y = rect.y + rect.height / 2; + const clickHandle = await waitForPointerUp(page); + await page.mouse.move(x, y); + await page.mouse.down(); + await page.mouse.move(rect.x - 1, rect.y - 1); + await page.mouse.up(); + await awaitPromise(clickHandle); + + await page.waitForSelector(getEditorSelector(0)); + const usedColor = await page.evaluate(() => { + const highlight = document.querySelector( + `.page[data-page-number = "1"] .canvasWrapper > svg.highlight` + ); + return highlight.getAttribute("fill"); + }); + + expect(usedColor).withContext(`In ${browserName}`).toEqual("#AB0000"); + }) + ); + }); + }); }); diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 0ea0abe0585c2..0e3f5cf3c1168 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -664,3 +664,4 @@ !issue18561.pdf !highlights.pdf !highlight.pdf +!bug1708040.pdf diff --git a/test/pdfs/bug1708040.pdf b/test/pdfs/bug1708040.pdf new file mode 100755 index 0000000000000000000000000000000000000000..2d0dbb29b03b20375b1162279929c80fff74f837 GIT binary patch literal 70324 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 literal 0 HcmV?d00001 diff --git a/test/unit/api_spec.js b/test/unit/api_spec.js index 94b1458923e39..dc5140fd1e692 100644 --- a/test/unit/api_spec.js +++ b/test/unit/api_spec.js @@ -3807,11 +3807,13 @@ Caron Broadcasting, Inc., an Ohio corporation (“Lessee”).`) role: "Figure", children: [{ type: "content", id: "p406R_mc11" }], alt: "d h c s logo", + bbox: [57.75, 676, 133.35, 752], }, { role: "Figure", children: [{ type: "content", id: "p406R_mc1" }], alt: "Great Seal of the State of California", + bbox: [481.5, 678, 544.5, 741], }, { role: "P", diff --git a/test/unit/struct_tree_spec.js b/test/unit/struct_tree_spec.js index a4841bffcc3ee..0551565597c79 100644 --- a/test/unit/struct_tree_spec.js +++ b/test/unit/struct_tree_spec.js @@ -107,4 +107,48 @@ describe("struct tree", function () { await loadingTask.destroy(); }); }); + + it("parses structure with a figure and its bounding box", async function () { + const filename = "bug1708040.pdf"; + const params = buildGetDocumentParams(filename); + const loadingTask = getDocument(params); + const doc = await loadingTask.promise; + const page = await doc.getPage(1); + const struct = await page.getStructTree(); + equalTrees( + { + children: [ + { + role: "Document", + children: [ + { + role: "Sect", + children: [ + { + role: "P", + children: [{ type: "content", id: "p21R_mc0" }], + lang: "EN-US", + }, + { + role: "P", + children: [{ type: "content", id: "p21R_mc1" }], + lang: "EN-US", + }, + { + role: "Figure", + children: [{ type: "content", id: "p21R_mc2" }], + alt: "A logo of a fox and a globe\u0000", + bbox: [72, 287.782, 456, 695.032], + }, + ], + }, + ], + }, + ], + role: "Root", + }, + struct + ); + await loadingTask.destroy(); + }); }); diff --git a/web/annotation_editor_layer_builder.css b/web/annotation_editor_layer_builder.css index aea5879b89527..8d01e4671821e 100644 --- a/web/annotation_editor_layer_builder.css +++ b/web/annotation_editor_layer_builder.css @@ -71,6 +71,10 @@ &:not(.free) span { cursor: var(--editorHighlight-editing-cursor); + + &[role="img"] { + cursor: var(--editorFreeHighlight-editing-cursor); + } } &.free span { diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js index 3193e3785440e..e3c154b841880 100644 --- a/web/pdf_page_view.js +++ b/web/pdf_page_view.js @@ -474,10 +474,13 @@ class PDFPageView { } const treeDom = await this.structTreeLayer?.render(); - if (treeDom && this.canvas && treeDom.parentNode !== this.canvas) { - // Pause translation when inserting the structTree in the DOM. + if (treeDom) { this.l10n.pause(); - this.canvas.append(treeDom); + this.structTreeLayer?.addElementsToTextLayer(); + if (this.canvas && treeDom.parentNode !== this.canvas) { + // Pause translation when inserting the structTree in the DOM. + this.canvas.append(treeDom); + } this.l10n.resume(); } this.structTreeLayer?.show(); @@ -768,7 +771,7 @@ class PDFPageView { this.annotationLayer = null; this._annotationCanvasMap = null; } - if (this.structTreeLayer && !(this.textLayer || this.annotationLayer)) { + if (this.structTreeLayer && !this.textLayer) { this.structTreeLayer = null; } if ( @@ -1068,7 +1071,10 @@ class PDFPageView { await this.#finishRenderTask(renderTask); if (this.textLayer || this.annotationLayer) { - this.structTreeLayer ||= new StructTreeLayerBuilder(pdfPage); + this.structTreeLayer ||= new StructTreeLayerBuilder( + pdfPage, + viewport.rawDims + ); } this.#renderTextLayer(); diff --git a/web/struct_tree_layer_builder.js b/web/struct_tree_layer_builder.js index 4e117eacec99e..ead85bbf12507 100644 --- a/web/struct_tree_layer_builder.js +++ b/web/struct_tree_layer_builder.js @@ -82,8 +82,13 @@ class StructTreeLayerBuilder { #elementAttributes = new Map(); - constructor(pdfPage) { + #rawDims; + + #elementsToAddToTextLayer = null; + + constructor(pdfPage, rawDims) { this.#promise = pdfPage.getStructTree(); + this.#rawDims = rawDims; } async render() { @@ -156,6 +161,50 @@ class StructTreeLayerBuilder { } } + #addImageInTextLayer(node, element) { + const { alt, bbox, children } = node; + const child = children?.[0]; + if (!this.#rawDims || !alt || !bbox || child?.type !== "content") { + return false; + } + + const { id } = child; + if (!id) { + return false; + } + + // We cannot add the created element to the text layer immediately, as the + // text layer might not be ready yet. Instead, we store the element and add + // it later in `addElementsToTextLayer`. + + element.setAttribute("aria-owns", id); + const img = document.createElement("span"); + (this.#elementsToAddToTextLayer ||= new Map()).set(id, img); + img.setAttribute("role", "img"); + img.setAttribute("aria-label", removeNullCharacters(alt)); + + const { pageHeight, pageX, pageY } = this.#rawDims; + const calc = "calc(var(--scale-factor)*"; + const { style } = img; + style.width = `${calc}${bbox[2] - bbox[0]}px)`; + style.height = `${calc}${bbox[3] - bbox[1]}px)`; + style.left = `${calc}${bbox[0] - pageX}px)`; + style.top = `${calc}${pageHeight - bbox[3] + pageY}px)`; + + return true; + } + + addElementsToTextLayer() { + if (!this.#elementsToAddToTextLayer) { + return; + } + for (const [id, img] of this.#elementsToAddToTextLayer) { + document.getElementById(id)?.append(img); + } + this.#elementsToAddToTextLayer.clear(); + this.#elementsToAddToTextLayer = null; + } + #walk(node) { if (!node) { return null; @@ -171,6 +220,9 @@ class StructTreeLayerBuilder { } else if (PDF_ROLE_TO_HTML_ROLE[role]) { element.setAttribute("role", PDF_ROLE_TO_HTML_ROLE[role]); } + if (role === "Figure" && this.#addImageInTextLayer(node, element)) { + return element; + } } this.#setAttributes(node, element); diff --git a/web/text_layer_builder.css b/web/text_layer_builder.css index 841b47be7057a..8dbac995cbe35 100644 --- a/web/text_layer_builder.css +++ b/web/text_layer_builder.css @@ -52,6 +52,11 @@ } /*#endif*/ + span[role="img"] { + user-select: none; + cursor: default; + } + .highlight { --highlight-bg-color: rgb(180 0 170 / 0.25); --highlight-selected-bg-color: rgb(0 100 0 / 0.25);