Prior to OSX 10.6, ATSFontActivateFromFileSpecification/ATSFontActivateFromFileReference were available and could be used to load a font from a file. I can't find anything similar in Core Text.
4 Answers
You can get a CTFontRef from a font file by going via a 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);
3 Comments
trojanfoe
This doesn't work under Snow Leopard (confirmed by Apple) and you need to use
ATSFontActivateFromMemory() on that version of OS X only.Andreas
Cannot confirm this. It works fine here on Snow Leopard.
David Jones
This seems to be missing the size, matrix, and attributes arguments to CTFontCreateWithGraphicsFont()
It looks like CTFontManagerCreateFontDescriptorsFromURL is the Core Text replacement.
1 Comment
Peter Hosey
And it makes for shorter code than the Core Graphics route.
Here's an updated version of how to do this in 2020. Much simpler now. Used 12 as arbitrary type size.
let fontURL = URL(fileURLWithPath: "path/to/font.otf")
let fd = CTFontManagerCreateFontDescriptorsFromURL(fontURL as CFURL) as! [CTFontDescriptor]
let theCTFont = CTFontCreateWithFontDescriptor(fd[0], 12.0, nil)