mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-20 15:18:08 +02:00
Use Calibri and Lucida Console, when it's possible, in place of sans-serif and monospaced (bug 1922063)
A recent change in Firefox induced too much difference between the text widths computed in using a Canvas and the ones computed by the text layout engine when rendering the text layer. Consequently, the text selection can be bad on Windows with some fonts like Arial or Consolas. This patch is a workaround to try to use in first place some fonts which don't have the problem.
This commit is contained in:
parent
5a25c477b7
commit
a45e4a391a
2 changed files with 39 additions and 3 deletions
|
@ -16,7 +16,13 @@
|
|||
/** @typedef {import("./display_utils").PageViewport} PageViewport */
|
||||
/** @typedef {import("./api").TextContent} TextContent */
|
||||
|
||||
import { AbortException, Util, warn } from "../shared/util.js";
|
||||
import {
|
||||
AbortException,
|
||||
FeatureTest,
|
||||
shadow,
|
||||
Util,
|
||||
warn,
|
||||
} from "../shared/util.js";
|
||||
import { setLayerDimensions } from "./display_utils.js";
|
||||
|
||||
/**
|
||||
|
@ -152,6 +158,24 @@ class TextLayer {
|
|||
}
|
||||
}
|
||||
|
||||
static get fontFamilyMap() {
|
||||
const { isWindows, isFirefox } = FeatureTest.platform;
|
||||
return shadow(
|
||||
this,
|
||||
"fontFamilyMap",
|
||||
new Map([
|
||||
[
|
||||
"sans-serif",
|
||||
`${isWindows && isFirefox ? "Calibri, " : ""}sans-serif`,
|
||||
],
|
||||
[
|
||||
"monospace",
|
||||
`${isWindows && isFirefox ? "Lucida Console, " : ""}monospace`,
|
||||
],
|
||||
])
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the textLayer.
|
||||
* @returns {Promise}
|
||||
|
@ -300,9 +324,12 @@ class TextLayer {
|
|||
angle += Math.PI / 2;
|
||||
}
|
||||
|
||||
const fontFamily =
|
||||
let fontFamily =
|
||||
(this.#fontInspectorEnabled && style.fontSubstitution) ||
|
||||
style.fontFamily;
|
||||
|
||||
// Workaround for bug 1922063.
|
||||
fontFamily = TextLayer.fontFamilyMap.get(fontFamily) || fontFamily;
|
||||
const fontHeight = Math.hypot(tx[2], tx[3]);
|
||||
const fontAscent =
|
||||
fontHeight * TextLayer.#getAscent(fontFamily, this.#lang);
|
||||
|
|
|
@ -636,9 +636,18 @@ class FeatureTest {
|
|||
) {
|
||||
return shadow(this, "platform", {
|
||||
isMac: navigator.platform.includes("Mac"),
|
||||
isWindows: navigator.platform.includes("Win"),
|
||||
isFirefox:
|
||||
(typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")) ||
|
||||
(typeof navigator?.userAgent === "string" &&
|
||||
navigator.userAgent.includes("Firefox")),
|
||||
});
|
||||
}
|
||||
return shadow(this, "platform", { isMac: false });
|
||||
return shadow(this, "platform", {
|
||||
isMac: false,
|
||||
isWindows: false,
|
||||
isFirefox: false,
|
||||
});
|
||||
}
|
||||
|
||||
static get isCSSRoundSupported() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue