diff --git a/src/pretix/base/pdf.py b/src/pretix/base/pdf.py index cb7fdb3525..fc1025cb11 100644 --- a/src/pretix/base/pdf.py +++ b/src/pretix/base/pdf.py @@ -848,12 +848,17 @@ class Renderer: 'center': TA_CENTER, 'right': TA_RIGHT } + # lineheight display differs from browser canvas. This calc is just empirical values to get + # reportlab render similarly to browser canvas. + # for backwards compatability use „uncorrected“ lineheight of 1.0 instead of 1.15 + lineheight = float(o['lineheight']) * 1.15 if 'lineheight' in o else 1.0 style = ParagraphStyle( name=uuid.uuid4().hex, fontName=font, fontSize=float(o['fontsize']), - leading=float(o['fontsize']), - autoLeading="max", + leading=lineheight * float(o['fontsize']), + # for backwards compatability use autoLeading if no lineheight is given + autoLeading='off' if 'lineheight' in o else 'max', textColor=Color(o['color'][0] / 255, o['color'][1] / 255, o['color'][2] / 255), alignment=align_map[o['align']] ) @@ -882,8 +887,15 @@ class Renderer: if o.get('downward', False): canvas.translate(float(o['left']) * mm, float(o['bottom']) * mm) canvas.rotate(o.get('rotation', 0) * -1) - p.drawOn(canvas, 0, -h - ad[1] / 2) + p.drawOn(canvas, 0, -h - ad[1] / 2.5) else: + if lineheight != 1.0: + # lineheight adds to ascent/descent offsets, just empirical values again to get + # reportlab to render similarly to browser canvas + ad = ( + ad[0], + ad[1] + (lineheight - 1.0) * float(o['fontsize']) * 1.05 + ) canvas.translate(float(o['left']) * mm, float(o['bottom']) * mm + h) canvas.rotate(o.get('rotation', 0) * -1) p.drawOn(canvas, 0, -h - ad[1]) diff --git a/src/pretix/control/templates/pretixcontrol/pdf/index.html b/src/pretix/control/templates/pretixcontrol/pdf/index.html index ead6a07ecb..e3fe3cec21 100644 --- a/src/pretix/control/templates/pretixcontrol/pdf/index.html +++ b/src/pretix/control/templates/pretixcontrol/pdf/index.html @@ -275,6 +275,18 @@ +