Re: Built-in versus embedded fonts

Robin Becker <[email protected]>
Newsgroups gmane.comp.python.reportlab.user
Message-ID <[email protected]>
On 22/06/2015 10:03, Glenn Linderman wrote:
> On 6/22/2015 1:16 AM, Marius Gedminas wrote:
........
>>> I vaguely recall implementing this "proxy for reality" late one night in a
>>> coding frenzy... is there an easy way to obtain stringWidth for a TTF font?
>> This works fine with all kinds of fonts:
>>
>>      canvas.stringWidth(text, font_name, font_size)
>
> Thanks for the response, but it doesn't work with my TTFont ones, as far as I
> can tell... I get the same errors as reported in my last message, but with a
> slightly different call stack.
>
......

in the very latest reportlab code you can do this

from reportlab.pdfgen.canvas import Canvas
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase.pdfmetrics import registerFont, registerFontFamily
registerFont(TTFont('arial','arial.ttf'))
registerFont(TTFont('arial-bold','arialbd.ttf'),)
registerFont(TTFont('arial-italic','ariali.ttf'),)
registerFont(TTFont('arial-bolditalic','arialbi.ttf'),)
registerFontFamily('arial',
		normal='arial',
		bold='arial-bold',
		italic='arial-italic',
		boldItalic='arial-bolditalic',)
sample = 'Hello World'
from reportlab.pdfbase.pdfmetrics import stringWidth
print "stringWidth(%r,'arial',12) = %s" % (sample,stringWidth(sample, 'arial',12))

canv = Canvas('thello.pdf',initialFontName='arial')
print "canv.stringWidth(%r) = %s" % (sample,canv.stringWidth(sample))

canv.drawString(72,72,sample)
canv.save()


the above produces

> C:\code\hg-repos\reportlab\tmp>thello.py
> stringWidth('Hello World','arial',12) = 62.015625
> canv.stringWidth('Hello World') = 62.015625


ie we added in initialFontName, initialFontSize & initialLeading arguments to 
the Canvas class. In addition the above shows that if the ttf is registered (the 
font family stuff is additional) then both pdfmetrics.stringWidth and 
canvas.stringWidth give reasonable results.


So Glenn, if you just use the register font stuff above

eg

from reportlab.pdfgen.canvas import Canvas
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase.pdfmetrics import registerFont, registerFontFamily
registerFont(TTFont('arial','arial.ttf'))
sample = 'Hello World'
from reportlab.pdfbase.pdfmetrics import stringWidth
print "stringWidth(%r,'arial',12) = %s" % (
          sample,stringWidth(sample, 'arial',12))

does this cause an error?
-- 
Robin Becker
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.