Html与NSAttibutedString相互转换,字号被加大

oicuivu 2016-05-25 05:55:50
最近开发用到富文本,在存储时,我想到了用html保存,方便嘛,可是加载保存的html时却发现所有字号都被加大了,很诡异啊,以下是部分代码,求大神解惑

//创建一段带属性的字符串
NSMutableAttributedString *attriString = [[NSMutableAttributedString alloc]initWithString:@"What can I do?中文测试"];
[attriString addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:24.0]
range:NSMakeRange(0, attriString.length)];
[attriString addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:NSMakeRange(0, attriString.length)];
[attriString addAttribute:NSBackgroundColorAttributeName
value:[UIColor grayColor]
range:NSMakeRange(0, 2)];
[attriString addAttribute:NSBackgroundColorAttributeName
value:[UIColor greenColor]
range:NSMakeRange(2, attriString.length-2)];
[attriString addAttribute:NSUnderlineStyleAttributeName
value:@1
range:NSMakeRange(0, attriString.length)];



//将带属性的字符串转换成html以便存储
NSDictionary *exportParams = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};
NSData *htmlData = [attriString dataFromRange:NSMakeRange(0, attriString.length) documentAttributes:exportParams error:nil];
NSString * test= [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];
NSLog(@"%@",test);

//将刚刚转换的html字符串转换成NSAttibutedString
//把font-size中的单位去掉就正常,不去掉的话,转成NSAttibutedString时会加大字号
//不知道为什么呀?就是这个很郁闷
test=[test stringByReplacingOccurrencesOfString:@"pt" withString:@""];
NSData *htmltest = [test dataUsingEncoding:NSUTF8StringEncoding];
// Create the HTML string
NSDictionary *importParams = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};
NSAttributedString *test2 = [[NSAttributedString alloc] initWithData:htmltest options:importParams documentAttributes:nil error:nil];
NSLog(@"%@",test2);
...全文
488 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcsaaron 2018-03-20
  • 打赏
  • 举报
回复
引用 楼主 oicuivu 的回复:
最近开发用到富文本,在存储时,我想到了用html保存,方便嘛,可是加载保存的html时却发现所有字号都被加大了,很诡异啊,以下是部分代码,求大神解惑

//创建一段带属性的字符串
NSMutableAttributedString *attriString = [[NSMutableAttributedString alloc]initWithString:@"What can I do?中文测试"];
    [attriString addAttribute:NSFontAttributeName
                        value:[UIFont systemFontOfSize:24.0]
                        range:NSMakeRange(0, attriString.length)];
    [attriString addAttribute:NSForegroundColorAttributeName
                        value:[UIColor redColor]
                        range:NSMakeRange(0, attriString.length)];
    [attriString addAttribute:NSBackgroundColorAttributeName
                        value:[UIColor grayColor]
                        range:NSMakeRange(0, 2)];
    [attriString addAttribute:NSBackgroundColorAttributeName
                        value:[UIColor greenColor]
                        range:NSMakeRange(2, attriString.length-2)];
    [attriString addAttribute:NSUnderlineStyleAttributeName
                        value:@1
                        range:NSMakeRange(0, attriString.length)];

//将带属性的字符串转换成html以便存储
NSDictionary *exportParams = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};
    NSData *htmlData = [attriString dataFromRange:NSMakeRange(0, attriString.length) documentAttributes:exportParams error:nil];
    NSString * test= [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];
    NSLog(@"%@",test);

//将刚刚转换的html字符串转换成NSAttibutedString
//把font-size中的单位去掉就正常,不去掉的话,转成NSAttibutedString时会加大字号
//不知道为什么呀?就是这个很郁闷
test=[test stringByReplacingOccurrencesOfString:@"pt" withString:@""];
    NSData *htmltest = [test dataUsingEncoding:NSUTF8StringEncoding];
    // Create the HTML string
    NSDictionary *importParams = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};
    NSAttributedString *test2 = [[NSAttributedString alloc] initWithData:htmltest options:importParams documentAttributes:nil error:nil];
    NSLog(@"%@",test2);
楼主,我最近在做富文本,也发现这个问题,NSAttributedString转html时,字体的单位被标为pt而不是px,再转回NSAttributedString时,字号被变大,我猜是苹果为了适应不同屏幕和分辨率的手机而自动做了适配,但是这不是我想要的,我需要上传到服务器,安卓端也要用到,输入时候的大小和显示出来的大小不一致,这不符合需求,暂时只能把转出来的html里的pt替换成px,但是文本中包含pt的字符串也同样会被替换,这该怎么办?有没有大神能提供一个正确的方式?
oicuivu 2016-05-30
  • 打赏
  • 举报
回复
引用 1 楼 cchvsgame 的回复:
看看输出的html文本,就知道原因了
html中字号单位如果没有或者是px的话,转attributedString正常,如果是pt的话,转成attributedString就会加大
cchvsgame 2016-05-28
  • 打赏
  • 举报
回复
看看输出的html文本,就知道原因了

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧