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

使用Objective-C而不是所有已安装字体的字体文件(.ttf)的PostScript名称,objective-c,iphone,cocoa,cocoa-touch,uifont,Objective C,Iphone,Cocoa,Cocoa Touch,Uifont,我想找出复制到Documents目录的.ttf文件的PostScript名称。。。因此,我可以通过编程方式将字体设置为标签,而无需更改.plist文件 我知道这个密码: for (NSString *fontFamilyName in [UIFont familyNames]) { for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) { NSLog(@"Family: %

我想找出复制到Documents目录的.ttf文件的PostScript名称。。。因此,我可以通过编程方式将字体设置为标签,而无需更改.plist文件

我知道这个密码:

  for (NSString *fontFamilyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
        NSLog(@"Family: %@    Font: %@", fontFamilyName, fontName);
    }
}
- (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;
但我只想找到一个文件的PostScript名称示例:segoe.ttf


显然,将有不同的字体文件将被复制到Documents目录,我想得到每个文件的PostScript名称,而不是像上面提到的代码那样。谢谢…

因此我使用以下代码获得它:

  for (NSString *fontFamilyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
        NSLog(@"Family: %@    Font: %@", fontFamilyName, fontName);
    }
}
- (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;

在macOSX上打开FontBook.app,安装字体,然后在那里进行检查。你不能做你想做的事。没有“默认不在这里的字体是什么”的方法。我知道怎么做,先生。关键是我想让它在应用程序中以编程方式工作。