2010-12-03 19 views
5

Ich möchte den absoluten Pfad zu einer TTF-Font-Datei unter Linux erhalten, wenn ein Font-Name angegeben wird (falls vorhanden). Gibt es einen Befehl oder eine API, die diese Informationen zurückgibt?Lokalisieren von Schriftarten unter Linux (in C++)

Zum Beispiel, gegeben "arial.ttf" Ich möchte den absoluten Pfad (z. B./usr/share/fonts/truetype/msttcorefonts/matary.ttf) wo immer es sein kann.

+0

mögliche Duplikate von [Wie erhalte ich eine Liste der installierten True Type Fonts unter Linux mit C oder C++?] (Http://stackoverflow.com/questions/203257/how-to-get-a-list-of- installed-true-type-fonts-on-linux-mit-c-or-c) –

Antwort

5

Der einfachste Weg ist wahrscheinlich fontconfig mit der --format Option zu verwenden:

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

in der Ausgabe

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

Anstelle der Schriftart Dateinamen führen, können Sie auch eine Schriftartbeschreibung liefern das kann etwas wie mono, DejaVu, :weight=bold, DejaVu-12 oder DejaVu:weight=bold sein. So zum Beispiel

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

Ergebnisse in

/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf 

auf meinem System. Das einzige, was nicht zu funktionieren scheint, ist der vollständige Pfad der Schriftartendatei.

+0

wie kann man eine font-beschreibung liefern? Bitte kannst du ein Beispiel geben? – Mohan

+0

@Mohan Wie gesagt: Ersetzen Sie einfach den Dateinamen durch die Schriftart Beschreibung. Ich habe jetzt ein Arbeitsbeispiel für die Schriftbeschreibung hinzugefügt. Ich hoffe es hilft. – cmaster

0

Wahrscheinlich ist es eine wirklich schlechte Idee zu versuchen, auf Schriftarten nach Pfad zuzugreifen, der Linux-Schriftstapel ist nicht auf diese Weise entworfen. Es wird keine Stabilität in den Speicherorten geben und viele der "Fonts", die Benutzer in Font-Listen erwarten, werden nicht einer einzelnen Font-Datei zugeordnet, sondern bestehen aus mehreren Font-Dateien.

Wenn Sie mit allen anderen Desktop-Apps konsistent sein möchten (und die Benutzer erwarten, dass die Schriftarten in allen Apps gleich funktionieren), müssen Sie auf Schriftarten über die fontconfig-Indirection-Ebene zugreifen (mit pango-cairo, oder QT) und akzeptiert das Ergebnis kann komplex und nicht intuitiv sein.

Es spielt keine Rolle, dass es für Sie weniger intuitiv erscheint, es ist nur wichtig, dass die Schriftauswahl genauso funktioniert wie in allen anderen Apps. Und normalerweise gibt es sehr gute Gründe für fontconfig mapping Auswahlmöglichkeiten.