mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-22 16:18:08 +02:00
Add lang
attribute to canvas element
Fixes issue #16843. In certain cases, the text layer was misaligned due to a difference between the `lang` attribute of the viewer and the canvas. This commit addresses the problem by adding the `lang` attribute to the canvas. The issue was caused because PDF.js uses serif/sans-serif fonts to generate the text layer and relies on system fonts. The difference in the `lang` attribute led to different fonts being picked, causing the misalignment.
This commit is contained in:
parent
9ee7c07b83
commit
9edca0a5ed
3 changed files with 21 additions and 7 deletions
|
@ -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 { canvas } of this.#canvasContexts.values()) {
|
||||
canvas.remove();
|
||||
}
|
||||
this.#canvasContexts.clear();
|
||||
}
|
||||
|
||||
static #getCtx(lang = null) {
|
||||
if (!this.#canvasCtx) {
|
||||
let canvasContext = this.#canvasContexts.get((lang ||= ""));
|
||||
if (!canvasContext) {
|
||||
// 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 <html> 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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue