将TTF/OTF字体转换为SVG的命令行工具

23

有没有命令行工具可以将TTF和OTF字体转换成SVG字体?

4个回答

25
You可以使用fontforge或batik从命令行执行此操作。
使用fontforge(请参见scripting documentation):
#!/usr/bin/fontforge
Open($1)
Generate($1:r + ".svg")

将上述内容保存到convert2svgfont.pe文件中,然后调用:

convert2svgfont.pe myfont.ttf

关于 batik,请参阅 此文档,安装后按以下方式调用:

java -jar batik-ttf2svg.jar myfont.ttf -o myfont.svg

谢谢@ErikDahlström,这个方法可行,但SVG中的字符是镜像/翻转的。我需要添加更多的函数调用来避免这种反转吗? - vimal1083
不,@Yashua,我做不到。但是我在CSS中找到了一个解决方案来翻转SVG。 - vimal1083
我在使用CSS/transforms翻转SVG时遇到了问题(导致所有的transforms都与翻转有关),因此我在Fontographer中加载了字体,选择了全部内容,点击了旋转180度并生成了一个倒置的TTF文件,解决了这个问题。 - cyberwombat
同意答案已经过时,应该有一种方法将答案标记为过时,并将另一个标记为最新的,因为投票不适用于这种情况。 - user254694
@Yitz - 脚本仍然可用,但必须指定语言为fontforge(ff)而不是Python(py)。 fontforge -lang ff -c 'Open($1); Generate($2)' wingdings.ttf wingdings.otf [docs](https://fontforge.org/docs/techref/cliargs.html) - joematune
显示剩余4条评论

17

之前由@Erik提供的fontforge教程已经无法使用 - fontforge已经转换为Python脚本。

以下是我如何在命令行上将字体从PFA转换为SVG的方法 - 这也适用于TTF等格式:

fontforge -c 'import fontforge;fontforge.open("/usr/share/fonts/X11/Type1/NachlieliCLM-Bold.pfa").generate("NachlieliCLM-Bold.svg")'

3
出于好奇,你和显然还有很多其他人仍需要SVG字体,是否有原因,考虑到它已经不再是规范的一部分,并且所有主要浏览器都已经停止支持它了?你在什么上下文中使用它们? - Hashim Aziz
7
对于我自己,我想在Inkscape中打开和编辑字体中的某些字形。字体不仅仅用于网站。 - MacroMan
初始脚本仍然有效,但您必须指定语言为fontforge(ff),而不是python(py)。 fontforge -lang ff -c 'Open($1); Generate($2)' wingdings.ttf wingdings.otf 文档 - joematune
有人可以指向一个Windows命令行脚本来处理这个吗?切换到WSL执行此过程很烦人。 - fmotion1
1
@HashimAziz 由于SVG字体是人类可读的XML,因此比OTF和TTF字体更容易通过程序或手动调整。 - undefined

1
这个答案中关于batik的部分也已经过时了,因为batik使用不推荐使用的glyph元素来输出svg。如果你在nasa.ttf上运行最新版本的batik,例如...
java -jar batik-ttf2svg-1.10.jar nasa.ttf -o myfont.svg

你会得到一个类似于这样的输出

<font horiz-adv-x="1045" ><font-face
font-family="Nasa"
units-per-em="2048"
panose-1="2 11 5 0 0 0 0 0 0 0"
ascent="1507"
descent="-393"
alphabetic="0" />

接下来是代表字体中每个字形的大量代码

处理这个问题的方法在使用SVG字形标记在HTML中的答案中表示 - 将字形转换为符号并翻转它们。

至于为什么字体在其X轴上翻转,请参阅规范的废弃部分https://www.w3.org/TR/SVG11/fonts.html#SVGFontsOverview

与SVG中的标准图形不同,在那里初始坐标系具有指向向下的y轴(请参阅初始坐标系),SVG字体的设计网格以及字形的初始坐标系出于与许多流行字体格式的公认行业实践的一致性,将y轴指向上方。


0

@Jay(我无法评论),在Windows上,这样做可以:

"C:\Program Files (x86)\FontForgeBuilds\fontforge.bat" -lang py -c "import fontforge; fontforge.open('C:/Temp/myFont.ttf').generate('C:/Temp/myFont.svg')"

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