BOMBOLOM.COM

(python) Erro na instalação do ReportLab

Este é um post de José Lopes (jose.lopes em paxBjulia.com - retirar o B).

Obtém-se, por vezes o seguinte erro na instalação do pacote ReportLab:

RenderPMError: Can't setFont(Times-Roman) missing
the T1 files?

Na instalação do ReportLab, quer no windows quer no Linux, é comum aparecer a seguinte mensagem de erro:

> Traceback (most recent call last):
>   File "reportlab.test", line 11, in ?
>     d.save(formats=['png'],outDir='/tmp',fnRoot='example1')
>   File "/usr/lib/python2.4/site-packages/reportlab/graphics/shapes.py", line 689, in save
>     renderPM.drawToFile(self,filename,fmt=bmFmt,showBoundary=getattr(self,'showBorder',rl_config.showBoundary),**_extraKW(self,'_renderPM_',**kw))
>   File "/usr/lib/python2.4/site-packages/reportlab/graphics/renderPM.py", line 591, in drawToFile
>     c = drawToPMCanvas(d, dpi=dpi, bg=bg, configPIL=configPIL, showBoundary=showBoundary)
>   File "/usr/lib/python2.4/site-packages/reportlab/graphics/renderPM.py", line 577, in drawToPMCanvas
>     draw(d, c, 0, 0, showBoundary=showBoundary)
>   File "/usr/lib/python2.4/site-packages/reportlab/graphics/renderPM.py", line 49, in draw
>     R.draw(renderScaledDrawing(drawing), canvas, x, y, showBoundary=showBoundary)
>   File "/usr/lib/python2.4/site-packages/reportlab/graphics/renderbase.py", line 200, in draw
>     self.initState(x,y)  #this is the push()
>   File "/usr/lib/python2.4/site-packages/reportlab/graphics/renderPM.py", line 86, in initState
>     self.applyState()
>   File "/usr/lib/python2.4/site-packages/reportlab/graphics/renderPM.py", line 80, in applyState
>     self._canvas.setFont(s['fontName'], s['fontSize'])
>   File "/usr/lib/python2.4/site-packages/reportlab/graphics/renderPM.py", line 358, in setFont
>     _setFont(self._gs,fontName,fontSize)
>   File "/usr/lib/python2.4/site-packages/reportlab/graphics/renderPM.py", line 238, in _setFont
>     raise RenderPMError, "Can't setFont(%s) missing the T1 files?\nOriginally %s:%s" % (fontName,s1,s2)
> reportlab.graphics.renderPM.RenderPMError: Can't setFont(Times-Roman) missing the T1 files?
> Originally exceptions.TypeError: makeT1Font() argument 2 must be string, not None

Mensagem de erro no Windows:

> Traceback (most recent call last):
>   File "L:\HereAndThere\Stairs\test.py", line 9, in -toplevel-
>     renderPM.drawToFile(drawing, 'example1.gif', 'GIF')
>   File "C:\Python23\lib\site-packages\reportlab\graphics\renderPM.py", line 559, in drawToFile
>     c = drawToPMCanvas(d, dpi=dpi, bg=bg, configPIL=configPIL, showBoundary=showBoundary)
>   File "C:\Python23\lib\site-packages\reportlab\graphics\renderPM.py", line 545, in drawToPMCanvas
>     draw(d, c, 0, 0, showBoundary=showBoundary)
>   File "C:\Python23\lib\site-packages\reportlab\graphics\renderPM.py", line 49, in draw
>     R.draw(drawing, canvas, x, y, showBoundary=showBoundary)
>   File "C:\Python23\lib\site-packages\reportlab\graphics\renderbase.py", line 188, in draw
>     self.initState(x,y)
>   File "C:\Python23\lib\site-packages\reportlab\graphics\renderPM.py", line 86, in initState
>     self.applyState()
>   File "C:\Python23\lib\site-packages\reportlab\graphics\renderPM.py", line 80, in applyState
>     self._canvas.setFont(s['fontName'], s['fontSize'])
>   File "C:\Python23\lib\site-packages\reportlab\graphics\renderPM.py", line 327, in setFont
>     _setFont(self._gs,fontName,fontSize)
>   File "C:\Python23\lib\site-packages\reportlab\graphics\renderPM.py", line 207, in _setFont
>     raise RenderPMError, "Can't setFont(%s) missing the T1 files?\nOriginally %s: %s" % (fontName,s1,s2)
> RenderPMError: Can't setFont(Times-Roman) missing the T1 files?
> Originally exceptions.TypeError: makeT1Font() argument 2 must be string, not None

Em qualquer dos casos o problema deve-se ao facto de não se possuir as fontes correctas no computador ou do RenderPM não as encontar. A resolução do problema é similar mas com pequenas nuances entre os dois sistemas.

LINUX

As fontes em falta são:

AdobeSansMM.MMM.pfb
AdobeSansMM.pfb
AdobeSerifMM.MMM.pfb
AdobeSerifMM.pfb
Arial-BoldItalic.pfb
Arial-Bold.pfb
Arial-Italic.pfb
Arial.pfb
Courier-BoldOblique.pfb
Courier-Bold.pfb
Courier-Oblique.pfb
Courier.pfb
Symbol.pfb
TimesNewRoman-BoldItalic.pfb
TimesNewRoman-Bold.pfb
TimesNewRoman-Italic.pfb
TimesNewRoman.pfb

Podem ser obtidas por download em:

O local onde o ReportLab vai procurar estas fontes está definido no ficheiro rl_config.py.

A parte relevante deste ficheiro para o problema tem o seguinte aspecto:

# places to look for T1Font information
T1SearchPath =  (
                'c:/Program Files/Adobe/Acrobat 6.0/Resource/Font', #Win32, Acrobat 6
                'c:/Program Files/Adobe/Acrobat 5.0/Resource/Font', #Win32, Acrobat 5
                'c:/Program Files/Adobe/Acrobat 4.0/Resource/Font', #Win32, Acrobat 4
                '%(disk)s/Applications/Python %(sys_version)s/reportlab/fonts', 
#Mac?
                '/usr/lib/Acrobat5/Resource/Font',      #Linux, Acrobat 5?
                '/usr/lib/Acrobat4/Resource/Font',      #Linux, Acrobat 4
                '/usr/local/Acrobat6/Resource/Font',    #Linux, Acrobat 5?
                '/usr/local/Acrobat5/Resource/Font',    #Linux, Acrobat 5?
                '/usr/local/Acrobat4/Resource/Font',    #Linux, Acrobat 4
                '%(REPORTLAB_DIR)s/fonts',              #special
                '%(REPORTLAB_DIR)s/../fonts',           #special
                '%(REPORTLAB_DIR)s/../../fonts',        #special
                '%(HOME)s/fonts',                       #special
                 )

Colocando os ficheiros das fontes em qualquer um destes path é suficiente para resolver o problema. Resta tambrém a opção de editar o ficheiro rl_config.py e definir o path apropriado.

WINDOWS:

As fontes em falta sao:

_abi____.pfb
_ab_____.pfb
_ai_____.pfb
_a______.pfb
cobo____.pfb
cob_____.pfb
com_____.pfb
coo_____.pfb
_ebi____.pfb
_eb_____.pfb
_ei_____.pfb
_er_____.pfb
Sy______.pfb
Zd______.pfb
Zx______.pfb
Zy______.pfb

Podem ser obtidas por download em:

No Windows a situacao é um pouco especial, se usar o Acrobat 4 este problema não se coloca, mas com uma versão posterior as fontes não estão acessíveis e é necessário fazer o download.

O local onde o ReportLab vai procurar estas fontes está definido no ficheiro rl_config.py como no Linux.

17.01.2007 | Ler mais | Comentários | Tags ,

Voltar à Página principal | Made with PyBlosxom