使用FontForge填充字体中的缺失字形

5

背景

我正在尝试将Google Noto Sans JP字体从.otf转换为.ttf,使用以下的fontforge脚本:

#!/usr/bin/env fontforge

Open($1)
CIDFlatten()
Generate($1:r + ".ttf")
Close()

当我在.otf上调用Open时,会出现许多缺失字形的错误信息。
No glyph with unicode U+07d22 in font
No glyph with unicode U+07d2f in font
No glyph with unicode U+07da0 in font
...

我的脚本将.otf转换为.ttf,但是加载字体后,这些字符没有被渲染出来(看起来像这样:[X])。
因此,我想要“填补空白”,并将相同的字形复制到缺失的位置。
问题在于,我运行以下脚本,尝试用一个相同的字形(U+f96a)替换其中一个缺失的字形(U+7d22):
#!/usr/bin/env fontforge

Open($1)
CIDFlatten()

Select(0uf96a)
Copy()
Select(0u7d22)
Paste()
SelectNone()

Generate($1:r + ".ttf")
Close()

然而,Fontforge 无法选择不存在的字符 U+7d22:
Select: Character not found: U+7D22

有人知道如何将字形复制到没有字形的码位上吗?

换句话说,有人知道如何填补这个字体中的空缺吗?


等一下,回头看看。你为什么要从 otf 转换成 ttf?(字体会变得非常大,并且所有的字形轮廓都会从立方贝塞尔曲线转换为二次贝塞尔曲线形式,导致失真) - Mike 'Pomax' Kamermans
仅仅因为我想要使用的程序支持 ttf 而不是 otf 字体格式 - 当退回到一种较少先进的格式时涉及的损失并不重要。 - Jack
这就留下了一个问题:“使用哪个程序?”因为ttf和otf都是OpenType字体,所以支持带有ttf扩展名的OpenType字体但不支持带有otf扩展名的程序值得作为“我需要它做什么”的问题陈述的一部分进行解释。 - Mike 'Pomax' Kamermans
@Mike'Pomax'Kamermans这是一个没有上下文的有用问题。我需要回答这样一个问题,对于Magento 2:PHP Zend_Pdf,在Magento 2.3中支持的不实现日语,韩语或中文字符集,这意味着需要字体技巧,因为好的免费.ttf亚洲字符集很难找到。 - Scott Anderson
不,你不需要:PDF,Adobe的格式,非常支持otf,这是Adobe首选的格式。事实上,它支持每种OpenType字体,因为ttf和otf都只是OpenType字体。而且有很多好的免费的OpenType CJK字体可供选择。 - Mike 'Pomax' Kamermans
1个回答

2
原来可以“填补空缺”在ttf格式中,所以我首先转换了字体,然后复制像这样的字形:
#!/usr/bin/env fontforge

Open($1)
CIDFlatten()
Generate($1:r + ".ttf")
Close()

Open($1:r + ".ttf")

Select(0uf96a)
Copy()
Select(0u7d22)
Paste()
SelectNone()

Generate($1:r + ".ttf")
Close()

嘿,这一切都很好,但是如果我想对整个字体进行操作,应该怎么做呢? - Scott Anderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接