[reportlab-users] Character placement off - bug or am I using it wrong?

ellie el at horse64.org
Sun Aug 21 09:55:33 EDT 2022


Update: reportlab support just confirmed to me this is a reportlab 
limitation/bug, and TTF fonts are placed without kerning.

I'll try to sum up the main points I sent them (I CC'ed it here but 
messed up the CC):

- I think whether this is visually acceptable for every font is 
debatable and I hoped this would be an option at least. For the example 
I linked with image I don't find no kerning visually acceptable, at 
least not for professional print.

- I find it surprising simply because any other TTF using lib under the 
sun that isn't advertised as simple/stripped down seems to do kerning. 
(Maybe I'm wrong? But I haven't seen one that does yet.)

- It seems to me this will cause interoperability problems for people. 
E.g. I layout with the help of a different TTF lib, then hammer that 
layout into reportlab with per word placement. But since reportlab 
doesn't use kerning (and the lib I layouted with does) the words are now 
too wide, so a lot of word pair spacing is unreadably wrong. I could use 
drawString() per character instead, but wouldn't I break ligatures or 
such things?

- Summed up, I'm hoping TTF kerning will be added one day and I find 
this limitation somewhat notable. Also, I'm hoping for alternate python 
PDF library suggestions where TTF kerning is done out of the box.

I hope that was an adequate summary!

On 8/16/22 8:21 PM, ellie wrote:
> Hi everyone,
> 
> I have an issue with .drawString() called on reportlab.pdfgen.Canvas 
> shown in the attached image, it seems characters are placed wrong. For 
> example, look at the word "Two" in the upper paragraph (created with 
> reportlab's placement), see how the "T" and "w" are oddly apart.
> 
> Also compare to the lower image (created via a hack overriding reportlab 
> placement), especially also all the commas which seem to be spaced too 
> far to the right by reportlab as well.
> 
> I use reportlab open-source 3.6.10, Python 3.10.6, and the attached font 
> "Tex Gyre Pagella" from the LaTeX community in TTF format.
> 
> 
> It looks like reportlab is placing letters with naive bounding boxes 
> rather than to properly overlap special pairs in whatever smart way the 
> font would provide. (That might be wrong, just my uninformed guess.)
> 
> Is this a reportlab bug? Is it a problem with the reportlab install, 
> like a missing library? Or do I need to pass some option for better 
> placement? If it's a bug, is there hope for a fix? If it's an install 
> issue, can I detect this in Python to avoid silently generating broken 
> PDFs?
> 
> Regards, ellie


More information about the reportlab-users mailing list