在Linux上定位字体(用C ++编写)

时间:2010-12-03 15:56:34

标签: c++ linux fonts true-type-fonts locate

我希望能够在给定字体名称(如果存在)时获取Linux上ttf字体文件的绝对路径。是否有返回该信息的命令或API?

例如,给定“arial.ttf”我想在任何地方找到绝对路径(例如/usr/share/fonts/truetype/msttcorefonts/arial.ttf)。

3 个答案:

答案 0 :(得分:5)

最简单的方法可能是将fontconfig--format选项一起使用:

$ fc-match --format=%{file} LiberationSans-Regular.ttf

将导致输出

/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf

您还可以提供类似monoDejaVu:weight=boldDejaVu-12或{{1}的字体说明,而不是字体文件名称。 }}。所以,例如,

DejaVu:weight=bold

结果

$ fc-match --format=%{file} :weight=bold

在我的系统上。唯一似乎不起作用的是给出字体文件的完整路径。

答案 1 :(得分:0)

你看过How to get a list of installed True Type Fonts on Linux using C or C++?吗?

那里没有可接受的答案,但它有一个良好的开端。

答案 2 :(得分:0)

可以说,尝试通过路径访问字体是一个非常糟糕的主意,linux字体堆栈不是这样设计的。地点不会有任何稳定性,用户在字体列表中预期的很多“字体”都不会映射到单个字体文件,而是多个字体文件的复合体。

如果您希望与所有其他桌面应用程序保持一致(并且用户希望字体选择在所有应用程序中以相同的方式工作),则需要通过fontconfig间接层按模式访问字体(使用pango-cairo,或者QT)并接受结果可能很复杂而且不直观。

对你而言,这似乎不那么直观并不重要,唯一重要的是字体选择与所有其他应用程序的工作方式相同。通常有很好的理由选择fontconfig映射。