ReportLab 如何注册使用其他语言字体
作者: Jim Wang 公众号: 巴博萨船长
摘要:ReportLab默认的支持的西欧字体都有哪些?如何注册并在模版中使用中日韩亚洲字体?
Abstract: What are the default supported Western European fonts in ReportLab? How do I register and use CJK Asian fonts in my templates?
作者: Jim Wang 公众号: 巴博萨船长
ReportLab 如何注册使用其他语言字体
默认语言
ReportLab默认支持西欧语言,例如英文,德语和法语(未测试)。默认支持14种字体,该内容在文档章节3.3 Using fonts中有介绍,具体字体名称如下:
- Helvetica
- Helvetica-Bold
- Courier
- Courier-Bold
- Courier-Oblique
- Courier-BoldOblique
- Helvetica-Oblique
- Helvetica-BoldOblique
- Times-Roman
- Times-Bold
- Times-Italic
- Times-BoldItalic
- ZapfDingbats
- Symbol
上述14种默认字体,也是Adobe’s Acrobat Reader默认支持的14种字体。
中日韩亚洲字体
ReportLab支持TrueType 字体支持。未注册非西欧字体却使用非西欧字符,程序并不会报错,但是到处的PDF文件中会出现乱码,注册TrueType字体支持字体的代码,官方文档介绍如下:
1 | # we know some glyphs are missing, suppress warnings |
对于相似字体可以使用如下代码注册为字体家族:
1 | from reportlab.pdfbase.pdfmetrics import registerFontFamily |
如在模版中使用下述代码。如果我们只有 Vera 常规字体,没有粗体或斜体,那么我们必须将所有字体映射到相同的内部字体名称。<b>和<i>标签现在可以安全使用,但会没有效果。
1 | <font name="Times-Roman" size="14">This is in Times-Roman</font> |
在项目中,我们使用思源中文字体,将相关字体文件保存在项目文件夹fonts之后,在Python代码中头部使用下面的代码注册字符。
1 | from reportlab.pdfbase import pdfmetrics |
上述代码中TTFont函数的第一参数为字体的内部表示名称。需要使用该名称在在RML模版文件的头部进行如下声明:
1 | <document filename="demo.pdf"> |
本文小结
这些背景知识是自己在完成任务的一开始具有的疑问,进而中查阅资料再收集整理成文的,这利于自己,也方便你我。如果你有问题或者不同的见解,欢迎关注我的微信公众号,然后留言讨论。
文章首发于 Jim Wang's blog , 转载文章请务必以超链接形式标明文章出处,作者信息及本版权声明。