我是Python的初学者,我正在尝试使用FontForge python绑定创建小型python脚本,重命名FontFiles SFNT属性(Family,SubFamily,FullName)。
脚本侦听raw_input
,然后准备字符串,并使用FontForge方法应用更改。
但我遇到了一个非常奇怪的问题,在方法参数中传递variable
(类型str)而不是直接传递'string'
时,更改未应用,但仅适用于SFNT属性之一。
我知道FontForge会从SFNT表创建一个元组。 FontForge提供了一种更改元组font.appendSFNTName(language,strid,string)
的方法。
更改适用于 SubFamily ,但不适用于家庭。
在检查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'))