当我指定字体时,reportlab 字体粗细不起作用

reportlab font weight does not work when I specify the font

我正在 python 中使用 reportlab 制作 pdf 报告。 我可以根据需要在段落中使用粗体标记,如下所示,但一旦我使用特定字体,粗体标记就不再显示为粗体。

import reportlab.rl_config
reportlab.rl_config.TTFSearchPath.append('/usr/share/fonts/FansyFont/')
from reportlab.pdfbase.pdfmetrics import registerFontFamily
registerFontFamily('FansyFont', normal='FansyFont-Regular', bold='FansyFont-Bold', italic='FansyFont-Italic', boldItalic='FansyFont-BoldItalic')
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
pdfmetrics.registerFont(TTFont('FansyFont-Bold', 'FansyFont-Bold.ttf'))
pdfmetrics.registerFont(TTFont('FansyFont-Regular', 'FansyFont-Regular.ttf'))
pdfmetrics.registerFont(TTFont('FansyFont-Italic', 'FansyFont-Italic.ttf'))
pdfmetrics.registerFont(TTFont('FansyFont-BoldItalic', 'FansyFont-BoldItalic.ttf'))


styles = getSampleStyleSheet()
ps = ParagraphStyle(styles['Normal'], fontName='FansyFont-Regular', alignment=TA_LEFT, fontSize=8)
Paragraph("<b>Table1:</b> some nice table", ps)

有没有办法让 reportlab 明白它应该将字体切换为 "FansyFont-Bold" 或者有没有办法让它选择正确的字体?

此外,在其他编程语言甚至其他 python 软件包(如 matplotlib)中,您只需指定字体系列而不是不同粗细的各个字体文件,那么我为什么需要在 reportlab 中指定它?

注册完所有字体后,你想用registerFontFamily()

把它们绑在一起
pdfmetrics.registerFont(TTFont('FansyFont-Bold', 'FansyFont-Bold.ttf'))
pdfmetrics.registerFont(TTFont('FansyFont-Regular', 'FansyFont-Regular.ttf'))
pdfmetrics.registerFont(TTFont('FansyFont-Italic', 'FansyFont-Italic.ttf'))
pdfmetrics.registerFont(TTFont('FansyFont-BoldItalic', 'FansyFont-BoldItalic.ttf'))

pdfmetrics.registerFontFamily(
    'FansyFont',
    normal='FansyFont-Regular',
    bold='FansyFont-Bold',
    italic='FansyFont-Italic',
    boldItalic='FansyFont-BoldItalic')

然后,只需使用 FansyFont 作为您的 fontName:

ps = ParagraphStyle(styles['Normal'], fontName='FansyFont', alignment=TA_LEFT, fontSize=8)