当给定字体名称(如果存在)时,我希望能够在 Linux 上获取 ttf 字体文件的绝对路径。是否有返回该信息的命令或 API?
例如,给定“arial.ttf”,我想在任何地方找到绝对路径(例如/usr/share/fonts/truetype/msttcorefonts/arial.ttf)。
最简单的方法可能是fontconfig
与--format
选项一起使用:
$ fc-match --format=%{file} LiberationSans-Regular.ttf
将导致输出
/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf
除了字体文件名,您还可以提供字体描述,可能类似于mono
、DejaVu
、:weight=bold
、DejaVu-12
或DejaVu:weight=bold
. 所以,例如,
$ fc-match --format=%{file} :weight=bold
结果是
/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf
在我的系统上。唯一似乎不起作用的是提供字体文件的完整路径。
可以说,尝试通过路径访问字体是一个非常糟糕的主意,linux 字体堆栈不是这样设计的。位置不会有任何稳定性,并且用户在字体列表中期望的许多“字体”不会映射到单个字体文件,而是多个字体文件的组合。
如果您想与所有其他桌面应用程序保持一致(并且用户希望字体选择在所有应用程序中以相同的方式工作),您需要通过 fontconfig 间接层(使用 pango-cairo 或 QT)按模式访问字体和接受结果可能很复杂且不直观。
对您来说它似乎不那么直观并不重要,重要的是字体选择与所有其他应用程序的工作方式相同。并且通常有很好的理由选择 fontconfig 映射。