diff --git a/src/display/text_layer.js b/src/display/text_layer.js index dd39aa856e32a..c19e6e8817103 100644 --- a/src/display/text_layer.js +++ b/src/display/text_layer.js @@ -81,7 +81,7 @@ class TextLayer { static #ascentCache = new Map(); - static #canvasCtx = null; + static #canvasContexts = new Map(); static #pendingTextLayers = new Set(); @@ -423,13 +423,15 @@ class TextLayer { return; } this.#ascentCache.clear(); - - this.#canvasCtx?.canvas.remove(); - this.#canvasCtx = null; + for (const canvasContext of this.#canvasContexts.values()) { + canvasContext.canvas.remove(); + } + this.#canvasContexts.clear(); } static #getCtx(lang = null) { - if (!this.#canvasCtx) { + let canvasContext = this.#canvasContexts.get((lang ||= "")); + if (!this.#canvasContexts) { // We don't use an OffscreenCanvas here because we use serif/sans serif // fonts with it and they depends on the locale. // In Firefox, the element get a lang attribute that depends on @@ -442,10 +444,12 @@ class TextLayer { // OffscreenCanvas. const canvas = document.createElement("canvas"); canvas.className = "hiddenCanvasElement"; + canvas.lang = lang; document.body.append(canvas); - this.#canvasCtx = canvas.getContext("2d", { alpha: false }); + canvasContext = canvas.getContext("2d", { alpha: false }); + this.#canvasContexts.set(lang, canvasContext); } - return this.#canvasCtx; + return canvasContext; } static #getAscent(fontFamily, lang) { diff --git a/test/pdfs/issue16843.pdf.link b/test/pdfs/issue16843.pdf.link new file mode 100644 index 0000000000000..e9939b642f262 --- /dev/null +++ b/test/pdfs/issue16843.pdf.link @@ -0,0 +1 @@ +https://github.com/mozilla/pdf.js/files/12366234/16_2020-044.pdf diff --git a/test/test_manifest.json b/test/test_manifest.json index 74bc215d9b695..6f6016d4a4ad8 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -2202,6 +2202,15 @@ "lastPage": 1, "type": "eq" }, + { + "id": "issue16843", + "file": "pdfs/issue16843.pdf", + "md5": "2845b2f7f02690c388c24c488297028a", + "rounds": 1, + "link": true, + "firstPage": 1, + "type": "text" + }, { "id": "issue5509", "file": "pdfs/issue5509.pdf",