Vertically center the glyphs in comb text fields

This commit is contained in:
Calixte Denizet 2026-06-20 18:06:14 +02:00
parent 59df671552
commit 34516bcec3
2 changed files with 10 additions and 9 deletions

View File

@ -2574,9 +2574,6 @@ class WidgetAnnotation extends Annotation {
fontSize,
totalWidth,
totalHeight,
defaultVPadding,
descent,
lineHeight,
alignment,
bidi(lines[0]).dir === "rtl",
annotationStorage
@ -2938,9 +2935,6 @@ class TextWidgetAnnotation extends WidgetAnnotation {
fontSize,
width,
height,
vPadding,
descent,
lineHeight,
alignment,
isRTL,
annotationStorage
@ -2977,11 +2971,18 @@ class TextWidgetAnnotation extends WidgetAnnotation {
previousWidth = glyphWidth;
}
const renderedComb = buf.join(" ");
// Vertically center the glyphs within the field: comb fields are mostly
// filled with uppercase letters and/or digits, hence we use the cap height
// (with a fallback on the ascent or the font size) to center them.
const vShift =
(height - (font.capHeight || font.ascent || 1) * fontSize) / 2;
return (
`/Tx BMC q ${colors}BT ` +
defaultAppearance +
` 1 0 0 1 ${numberToString(hShift)} ${numberToString(
vPadding + descent
vShift
)} Tm ${renderedComb}` +
" ET Q EMC"
);

View File

@ -2054,7 +2054,7 @@ describe("annotation", function () {
annotationStorage
);
expect(appearance).toEqual(
"/Tx BMC q BT /Helv 5 Tf 1 0 0 1 0 3.07 Tm" +
"/Tx BMC q BT /Helv 5 Tf 1 0 0 1 0 3.21 Tm" +
" 2.61 0 Td (a) Tj 8 0 Td (a) Tj 8.56 0 Td (\\() Tj" +
" 7.44 0 Td (a) Tj 8 0 Td (a) Tj" +
" 8.56 0 Td (\\)) Tj 7.44 0 Td (a) Tj" +
@ -2095,7 +2095,7 @@ describe("annotation", function () {
annotationStorage
);
expect(appearance).toEqual(
"/Tx BMC q BT /Goth 5 Tf 1 0 0 1 0 3.07 Tm" +
"/Tx BMC q BT /Goth 5 Tf 1 0 0 1 0 2.5 Tm" +
" 1.5 0 Td (\x30\x53) Tj 8 0 Td (\x30\x93) Tj 8 0 Td (\x30\x6b) Tj" +
" 8 0 Td (\x30\x61) Tj 8 0 Td (\x30\x6f) Tj" +
" 8 0 Td (\x4e\x16) Tj 8 0 Td (\x75\x4c) Tj" +