PostScript使用Objective-C而不是所有已安装的字体的字体文件(.ttf)的名称

问题描述:

我想找出已复制到Documents Directory的.ttf文件的PostScript名称...以便我可以设置以编程方式将字体添加到标签,而不更改.plist文件。PostScript使用Objective-C而不是所有已安装的字体的字体文件(.ttf)的名称

我知道这个代码:

for (NSString *fontFamilyName in [UIFont familyNames]) { 
    for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) { 
     NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName); 
    } 
} 

但我想找到的PostScript名称,只有一个文件,例如:segoe.ttf

显然会有哪些将被复制到文档目录不同的字体文件我只想为每个单个文件获取PostScript名称,而不喜欢上面提到的代码中的那个。谢谢...

+0

打开FontBook.app您的MacOSX,安装字体,并检查它。你不能做你想做的事。没有“什么字体是不是默认的方法”。 – Larme

+0

我知道如何去做这件事。关键是我想让它在应用程序内部以编程方式工作。 –

所以我用这个代码得到它:

- (NSString *)realNameOfFont:(NSString *)fullFontName { 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSString *docFilePath = [documentsDirectory stringByAppendingPathComponent:fullFontName]; 

NSData *data = [NSData dataWithContentsOfFile:docFilePath]; 
if (data == nil) { 
    NSLog(@"Failed to load font. Data at path %@ is null", fullFontName); 
    return nil; 
} 
    CFErrorRef errorRef; 
    CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data); 
    CGFontRef font = CGFontCreateWithDataProvider(provider); 
    NSString *realFontName = (__bridge NSString *)CGFontCopyPostScriptName(font); 
    if (!CTFontManagerRegisterGraphicsFont(font, &errorRef)) { 
     NSError *error = (__bridge NSError *)errorRef; 
     if (error.code != kCTFontManagerErrorAlreadyRegistered) { 
      NSLog(@"Failed to load font: %@", error); 
     } 
    } 
    NSLog(@"PostScript Font Name:%@", realFontName); 
    CFRelease(font); 
    CFRelease(provider); 
    return realFontName;