我正在使用reportlab来创建pdfs。当我尝试使用以下方法设置字体时,我得到KeyError
:
pdf = Canvas('test.pdf')
pdf.setFont('Tahoma', 16)
但如果我使用'Courier'
代替'Tahoma'
则没有问题。我怎样才能使用Tahoma?
答案 0 :(得分:51)
Perhabs Tahoma是TrueType字体,您需要先注册它。根据ReportLab的用户指南,您需要这样做:
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
pdfmetrics.registerFont(TTFont('Vera', 'Vera.ttf'))
pdfmetrics.registerFont(TTFont('VeraBd', 'VeraBd.ttf'))
pdfmetrics.registerFont(TTFont('VeraIt', 'VeraIt.ttf'))
pdfmetrics.registerFont(TTFont('VeraBI', 'VeraBI.ttf'))
canvas.setFont('Vera', 32)
canvas.drawString(10, 150, "Some text encoded in UTF-8")
canvas.drawString(10, 100, "In the Vera TT Font!")
canvas对象有一个getAvailableFonts
方法,该方法应返回所有当前已注册(因此可用)的字体。
答案 1 :(得分:1)
从Reiner's answer开始。
一个警告就完美了。
Reportlab仅在预定义文件夹中搜索字体:
TTFSearchPath = (
'c:/winnt/fonts',
'c:/windows/fonts',
'/usr/lib/X11/fonts/TrueType/',
'/usr/share/fonts/truetype',
'/usr/share/fonts', #Linux, Fedora
'/usr/share/fonts/dejavu', #Linux, Fedora
'%(REPORTLAB_DIR)s/fonts', #special
'%(REPORTLAB_DIR)s/../fonts', #special
'%(REPORTLAB_DIR)s/../../fonts',#special
'%(CWD)s/fonts', #special
'~/fonts',
'~/.fonts',
'%(XDG_DATA_HOME)s/fonts',
'~/.local/share/fonts',
#mac os X - from
#http://developer.apple.com/technotes/tn/tn2024.html
'~/Library/Fonts',
'/Library/Fonts',
'/Network/Library/Fonts',
'/System/Library/Fonts',
)
如果您尝试使用从Internet上下载的ttf字体,并且希望该字体在所有服务器上都可用,则建议以下操作:
确保您的设置中包含BASE_DIR / ROOT_DIR之类的内容:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
将以下行添加到生成pdf的python文件中:
import reportlab
from django.conf import settings
reportlab.rl_config.TTFSearchPath.append(str(settings.BASE_DIR) + '/app/lib/reportlabs/fonts')
pdfmetrics.registerFont(TTFont('Copperplate', 'Copperplate-Gothic-Bold.ttf'))
答案 2 :(得分:0)
通过将DejaVuSans Font添加到应用程序解决了我的问题。 这是代码片段
pdfmetrics.registerFont(TTFont('DejaVuSans','DejaVuSans.ttf'))
并使用UTF8进行所有编码。:)