将TTF字体文件编码/序列化为NSData

时间:2015-09-18 09:03:34

标签: ios serialization core-text uifont

我正在尝试使用mattt的UIFontSerialization类(here)将一些UIFont对象转换为NSData,以便能够将它们序列化并将它们保存在CoreData或Realm数据库,但我知道它不会做我需要的。

我正在尝试序列化ttf文件本身(我从API接收),因此我不需要将它们存储在用户的Documents目录或任何地方。我的想法是我的数据库存储了渲染字体所需的一切。

使用CTFontCopyTableCTFontRef转换为CFDataRef时,我遇到了障碍。我这样做:

UIFont *originalFont = [UIFont fontWithName:@"Geometos" size:48];
CTFontRef fontRef = CTFontCreateWithName((__bridge CFStringRef)originalFont.fontName, originalFont.pointSize, NULL);
CFDataRef dataRef = CTFontCopyTable(fontRef, kCTFontTableCFF, kCTFontTableOptionNoOptions);
NSData *encodedFont = (__bridge_transfer NSData *)dataRef;

originalFont很好,在我的捆绑中,显示在标签等中。fontRef也是正确创建的,不用担心。 dataRef最终为零。如果我将表格标签从CFF切换到其他东西,它会进行编码,但是稍后当我将其解码回UIFont时,它会失败,所以我想我需要使用CFF表(我不知道CFF代表什么)。

有人做过这个吗?存储字体作为序列化数据?

1 个答案:

答案 0 :(得分:0)

试试这个。

UIFont *originalFont = [UIFont fontWithName:@"Arial" size:48];//Geometos
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:originalFont];
NSFont *font = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"font:%@",font);