1

我是一个 Python 初学者,我正在尝试创建一个小的 Python 脚本,它使用 FontForge Python 绑定重命名 FontFiles SFNT 属性(Family、SubFamily、FullName)。

该脚本侦听raw_input,然后准备字符串,并使用 FontForge 方法应用更改。

但是我遇到了一个很奇怪的问题,当在方法参数中传递 a variable(type str) 而不是直接 a'string'时,没有应用更改,而仅适用于 SFNT 属性之一。

我知道 FontForge 从 SFNT 表创建一个元组。FontForge 提供了一种更改元组的方法font.appendSFNTName(language,strid,string)

例如,更改适用于SubFamily,但不适用于Family

在检查是否是 unicode 的问题后,它也无济于事。

遗憾的是,我的 C 语言技能不是很好,无法检查 Python 绑定中是否进行了一些奇怪的转换。

我在这里完全错过了什么吗?

这是代码摘录:

#! /usr/bin/env python
import fontforge 
import sys  

fontfile = sys.argv[1]

try:
    font = fontforge.open(fontfile)
except EnvironmentError:
    sys.exit(1)

family_name = u' {}'.format(raw_input('Family name: ')
                      or 'Default Family Name')
style_name = '{}'.format(raw_input('Style name: ')
                     or 'Default Style Name')
full_name = family_name + " " + style_name

# Apply PostScript names
font.familyname = family_name
font.fullname = family_name + " " + style_name
font.fontname = full_name

# Force SFNT Table
font.appendSFNTName('English (US)', 'Family', family_name) # here
font.appendSFNTName('English (US)', 'SubFamily', style_name)
font.appendSFNTName('English (US)', 'Fullname', full_name)


print "Family is", font.sfnt_names[1]
print "SubFamily is", font.sfnt_names[2]

# Save and create a new font
font.generate(font.fontname + '-new.otf', flags=('opentype'))
4

0 回答 0