如何使用Core Text从文件加载字体(TTF)?

时间:2010-04-24 03:20:46

标签: cocoa macos macos-carbon osx-snow-leopard core-text

在OSX 10.6之前,ATSFontActivateFromFileSpecification / ATSFontActivateFromFileReference可用,可用于从文件加载字体。我在Core Text中找不到类似的东西。

4 个答案:

答案 0 :(得分:18)

您可以通过CTFontRef来获取字体文件中的CGFontRef

CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR("/path/to/font"), kCFURLPOSIXPathStyle, false);
CGDataProviderRef dataProvider = CGDataProviderCreateWithURL(url);
CGFontRef theCGFont = CGFontCreateWithDataProvider(dataProvider);
CTFontRef theCTFont = CTFontCreateWithGraphicsFont(theCGFont);
CFRelease(theCGFont);
CFRelease(dataProvider);
CFRelease(url);

// do something with the CTFontRef here

CFRelease(theCTFont);   

答案 1 :(得分:10)

看起来CTFontManagerCreateFontDescriptorsFromURL是核心文本的替代品。

答案 2 :(得分:4)

NSURL *fontURL = [[NSBundle mainBundle] URLForResource:@"Crystal" withExtension:@"ttf"];
    assert(fontURL);
    CFErrorRef error = NULL;
    if (!CTFontManagerRegisterFontsForURL((__bridge CFURLRef)fontURL, kCTFontManagerScopeProcess, &error))
    {
        CFShow(error);
        abort();
    }

答案 3 :(得分:2)

这是2020年如何执行此操作的更新版本。现在要简单得多。使用12作为任意类型的大小。

let fontURL = URL(fileURLWithPath: "path/to/font.otf")
let fd = CTFontManagerCreateFontDescriptorsFromURL(fontURL as CFURL) as! [CTFontDescriptor]
let theCTFont = CTFontCreateWithFontDescriptor(fd[0], 12.0, nil)