From 34516bcec3a998051ef2cdff4bf355a107721d6f Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Sat, 20 Jun 2026 18:06:14 +0200 Subject: [PATCH] Vertically center the glyphs in comb text fields --- src/core/annotation.js | 15 ++++++++------- test/unit/annotation_spec.js | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/core/annotation.js b/src/core/annotation.js index 0fd275c74..13318bb0a 100644 --- a/src/core/annotation.js +++ b/src/core/annotation.js @@ -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" ); diff --git a/test/unit/annotation_spec.js b/test/unit/annotation_spec.js index 99fe01e78..3d87279e7 100644 --- a/test/unit/annotation_spec.js +++ b/test/unit/annotation_spec.js @@ -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" +