From 44c97c19be85a8ea2cb9344f71c1ba698bc190e4 Mon Sep 17 00:00:00 2001 From: Guillaume Ayoub Date: Sat, 1 Feb 2025 16:56:39 +0100 Subject: [PATCH] Round and test ascent and descent Related to #2368. --- tests/test_pdf.py | 9 +++++++++ weasyprint/pdf/fonts.py | 8 ++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/tests/test_pdf.py b/tests/test_pdf.py index ee24535da..9a1cbc8ba 100644 --- a/tests/test_pdf.py +++ b/tests/test_pdf.py @@ -742,3 +742,12 @@ def generate_rdf_metadata(*args, **kwargs): pdf_bytes = pdf_document.write_pdf( pdf_variant='pdf/a-3b', pdf_identifier=b'example-bytes', uncompressed_pdf=True) assert b'TEST_METADATA' in pdf_bytes + + +@assert_no_logs +def test_font_descent_ascent(): + pdf = FakeHTML(string=''' + abc + ''').write_pdf() + assert b'/Descent -200' in pdf + assert b'/Ascent 800' in pdf diff --git a/weasyprint/pdf/fonts.py b/weasyprint/pdf/fonts.py index 4e4fce917..2ffd75e8e 100644 --- a/weasyprint/pdf/fonts.py +++ b/weasyprint/pdf/fonts.py @@ -70,12 +70,12 @@ def __init__(self, pango_font, description, font_size): # Set ascent and descent. if self.font_size: pango_metrics = pango.pango_font_get_metrics(pango_font, ffi.NULL) - self.ascent = int( + self.ascent = int(round( pango.pango_font_metrics_get_ascent(pango_metrics) * FROM_UNITS / - self.font_size * 1000) - self.descent = -int( + self.font_size * 1000)) + self.descent = -int(round( pango.pango_font_metrics_get_descent(pango_metrics) * FROM_UNITS / - self.font_size * 1000) + self.font_size * 1000)) else: self.ascent = self.descent = 0