首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >reportlab用registerFont添加字体

reportlab用registerFont添加字体
EN

Stack Overflow用户
提问于 2016-09-07 07:30:56
回答 1查看 4.4K关注 0票数 4

我必须使用来自registerFontFamily的reportlab.pdfbase.pdfmetrics方法。我试图向一个家庭添加两种字体,但不能使用粗体字体"sometext“。我需要这个功能作为我的报告。我只能用普通的,我不知道为什么。

这是密码。

代码语言:javascript
复制
registerFont(TTFont('Own_Font', os.path.dirname(os.path.abspath(__file__)) + '\\OwnSans-Regular.ttf'))
registerFont(TTFont('OwnBold_Font', os.path.dirname(os.path.abspath(__file__)) + '\\OwnSans-Bold.ttf'))

registerFontFamily('Own_Font',normal='Own_Font',bold='OwnBold_Font')

# define parameter for the page and paragraph font
PAGE_WIDTH, PAGE_HEIGHT = landscape(A4)
STYLES                  = getSampleStyleSheet()
STYLES.add( ParagraphStyle(name='Text', fontName = 'Own_Font', fontSize = 10 ))

STYLES.add( ParagraphStyle(name='Centered', fontName = 'Own_Font', fontSize = 10, alignment=TA_CENTER ))
STYLES.add( ParagraphStyle(name='CenteredBig', parent=STYLES['Centered'], fontSize=18, spaceAfter=10) )
STYLES.add( ParagraphStyle(name='CenteredMedium', parent=STYLES['Centered'], fontSize=15, spaceAfter=10) )

我收到以下错误消息:

代码语言:javascript
复制
  File "X:\tools\Python2\lib\site-packages\reportlab-2.7-py2.7-win32.egg\reportlab\platypus\paragraph.py", line 916, in __init__
    self._setup(text, style, bulletText or getattr(style,'bulletText',None), frags, cleanBlockQuotedText)
  File "X:\tools\Python2\lib\site-packages\reportlab-2.7-py2.7-win32.egg\reportlab\platypus\paragraph.py", line 938, in _setup
    style, frags, bulletTextFrags = _parser.parse(text,style)
  File "X:\tools\Python2\lib\site-packages\reportlab-2.7-py2.7-win32.egg\reportlab\platypus\paraparser.py", line 1083, in parse
    self.feed(text)
  File "X:\tools\Python2\lib\site-packages\reportlab-2.7-py2.7-win32.egg\reportlab\lib\xmllib.py", line 562, in finish_starttag
    self.handle_starttag(tag, method, attrs)
  File "X:\tools\Python2\lib\site-packages\reportlab-2.7-py2.7-win32.egg\reportlab\lib\xmllib.py", line 596, in handle_starttag
    method(attrs)
  File "X:\tools\Python2\lib\site-packages\reportlab-2.7-py2.7-win32.egg\reportlab\platypus\paraparser.py", line 823, in start_para
    self._stack = [self._initial_frag(attr,_paraAttrMap)]
  File "X:\tools\Python2\lib\site-packages\reportlab-2.7-py2.7-win32.egg\reportlab\platypus\paraparser.py", line 817, in _initial_frag
    frag.fontName, frag.bold, frag.italic = ps2tt(style.fontName)
  File "X:\tools\Python2\lib\site-packages\reportlab-2.7-py2.7-win32.egg\reportlab\lib\fonts.py", line 75, in ps2tt
    raise ValueError("Can't map determine family/bold/italic for %s" % psfn)
ValueError: Can't map determine family/bold/italic for Own_Font

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-07 11:37:11

第一个问题是您在registerFontFamily中做了一个错误。更确切地说,您通过执行bold='Own_Font'将普通字体注册为粗体。

第二个问题是,您的字体系列没有针对所有类型的字体(在本例中为斜体和boldItalic)。根据手册,如果你把薇拉读成Own_font

如果我们只有一个维拉常规字体,没有粗体或斜体,那么我们必须映射所有的内部字体名称相同。现在可以安全地使用<b><i>标记,但没有任何效果。注册并将Vera字体映射为

因此,要修复它,您应该像下面这样替换受影响的行:

代码语言:javascript
复制
registerFontFamily('Own_Font',normal='Own_Font',bold='OwnrBold_Font',italic='Own_Font',boldItalic='OwnrBold_Font')

这将使<b></b>功能与预期的一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39363800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档