已安装的字体OS X / C列表

时间:2009-07-11 05:45:39

标签: python c macos fonts

我正在尝试以编程方式获取C或Python中已安装字体的列表。我需要能够在OS X上执行此操作,有人知道如何操作吗?

5 个答案:

答案 0 :(得分:13)

安装了PyObjC的Python(适用于Mac OS X 10.5+的情况,因此无需安装任何内容即可使用此代码):

import Cocoa
manager = Cocoa.NSFontManager.sharedFontManager()
font_families = list(manager.availableFontFamilies())

(根据htw的回答)

答案 1 :(得分:4)

不完全是C,但在Objective-C中,您可以通过Cocoa框架轻松获取已安装字体的列表:

// This returns an array of NSStrings that gives you each font installed on the system
NSArray *fonts = [[NSFontManager sharedFontManager] availableFontFamilies];

// Does the same as the above, but includes each available font style (e.g. you get
// Verdana, "Verdana-Bold", "Verdana-BoldItalic", and "Verdana-Italic" for Verdana).
NSArray *fonts = [[NSFontManager sharedFontManager] availableFonts];

如果需要,您可以通过PyObjC从Python访问Cocoa框架。

在C中,我认为你可以在Carbon中使用ATSUI库做类似的事情,虽然我不完全确定如何做到这一点,因为我之前没有使用过Carbon中的字体。不过,通过浏览ATSUI文档,我建议您查看ATSUGetFontIDsATSUGetIndFontName函数。以下是ATSUI documentation的链接以获取更多信息。

答案 2 :(得分:4)

为什么不使用终端?

系统字体:

ls -R /System/Library/Fonts | grep ttf

用户字体:

ls -R ~/Library/Fonts | grep ttf

Mac OS X默认字体:

ls -R /Library/Fonts | grep ttf

如果您需要在C程序中运行它:

void main()
{ 
    printf("System fonts: ");
    execl("/bin/ls","ls -R /System/Library/Fonts | grep ttf", "-l",0);
    printf("Mac OS X Default fonts: ");
    execl("/bin/ls","ls -R /Library/Fonts | grep ttf", "-l",0);
    printf("User fonts: ");
    execl("/bin/ls","ls -R ~/Library/Fonts | grep ttf", "-l",0);
}

答案 3 :(得分:1)

你想编写程序吗?或者你想使用程序来做吗?有许多程序可以列出字体,xlsfonts可以想到。

答案 4 :(得分:0)

您可以使用Objective-C和Cocoa获取可用字体数组。您要查找的方法是NSFontManager's availableFonts

我不相信有一种标准的方法来确定使用纯C的系统字体是什么。但是,你可以自由地混合C和Objective-C,所以它真的不应该很难使用这个方法来做你想做的事。