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.
How can you load a font (TTF) from a file using Core Text?
Asked Answered
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);
Cannot confirm this. It works fine here on Snow Leopard. –
Legator
This seems to be missing the size, matrix, and attributes arguments to CTFontCreateWithGraphicsFont() –
Laylalayman
It looks like CTFontManagerCreateFontDescriptorsFromURL
is the Core Text replacement.
And it makes for shorter code than the Core Graphics route. –
Pigtail
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)
NSURL *fontURL = [[NSBundle mainBundle] URLForResource:@"Crystal" withExtension:@"ttf"];
assert(fontURL);
CFErrorRef error = NULL;
if (!CTFontManagerRegisterFontsForURL((__bridge CFURLRef)fontURL, kCTFontManagerScopeProcess, &error))
{
CFShow(error);
abort();
}
© 2022 - 2024 — McMap. All rights reserved.
ATSFontActivateFromMemory()
on that version of OS X only. – Columbine