2014-04-09 101 views
0

如何使用FontawesomeReportlab? 我有一些錯誤,沒有找到任何解決方案Reportlab和Fontawesome字體

from reportlab.pdfbase import pdfmetrics 
from reportlab.pdfbase.ttfonts import TTFont 
from reportlab.pdfgen import canvas 

pdffile = 'test.pdf' 
ttffile = '/somepath/fonts/fontawesome-webfont.ttf' 

c = canvas.Canvas(pdffile) 
pdfmetrics.registerFont(TTFont('fontawesome', ttffile)) 
c.setFont('fontawesome', 32) 
c.drawString(10, 150, "test") 
c.showPage() 
c.save() 

Traceback (most recent call last): 
    File "/somepath/test.py", line 9, in <module> 
    pdfmetrics.registerFont(TTFont('fontawesome', ttffile)) 
    File "/usr/local/lib/python3.3/dist-packages/reportlab/pdfbase/ttfonts.py", line 989, in __init__ 
    self.face = TTFontFace(filename, validate=validate, subfontIndex=subfontIndex) 
    File "/usr/local/lib/python3.3/dist-packages/reportlab/pdfbase/ttfonts.py", line 895, in __init__ 
    TTFontFile.__init__(self, filename, validate=validate, subfontIndex=subfontIndex) 
    File "/usr/local/lib/python3.3/dist-packages/reportlab/pdfbase/ttfonts.py", line 394, in __init__ 
    self.extractInfo(charInfo) 
    File "/usr/local/lib/python3.3/dist-packages/reportlab/pdfbase/ttfonts.py", line 469, in extractInfo 
    psName = names[6].replace(b" ", b"-") #Dinu Gherman's fix for font names with spaces 
TypeError: Can't convert 'bytes' object to str implicitly 

ReportLab的= 3.0

的Python 3.3.2 =

回答

1

我希望你已經找到了你的問題的答案或以不同的方式解決了問題。但我認爲這個答案對其他人有用。 你幾乎所有事情都做對了。但FontAwesome是一種標誌性字體。有了它,你不能打印文本。爲了使用FontAwesome圖標,您必須編寫Unicode代碼。 這是一個示例代碼。

# !usr/bin/python 
# -*- coding: utf-8 -*- 

from reportlab.pdfbase import pdfmetrics 
from reportlab.pdfbase.ttfonts import TTFont 
from reportlab.pdfgen.canvas import Canvas 

pdfmetrics.registerFont(
    TTFont("FontAwesome", "fontawesome-webfont.ttf")) 
canvas = Canvas("pdffile.pdf", pagesize=letter) 
canvas.setFont("FontAwesome", 30) 
icon = u"\uf1e3" # fa-futbol-o 
canvas.drawString(100,100,icon) 
canvas.save() 

Unicode代碼被所期望的圖標或on this table的頁上指定。

相關問題