NSAttributedString 转 HTML

11
2个回答

7

虽然不是“简单”的方法,但可以尝试通过迭代字符串的属性来实现:

- (void)enumerateAttributesInRange:(NSRange)enumerationRange 
                           options:(NSAttributedStringEnumerationOptions)opts 
                        usingBlock:(void (^)(NSDictionary *attrs, NSRange range, BOOL *stop))block

有一个NSMutableString变量来累积HTML(我们称之为“html”)。在块中,你可以使用字符串手动构建HTML。例如,如果文本属性“attrs”指定红色,加粗的文本:

[html appendFormat:@"<span style='color:red; font-weight: bold;'>%@</span>", [originalStr substringWithRange:range]]


编辑:昨天偶然发现了这个:

NSAttributedString+HTMLFromRange类别来自“UliKit” (https://github.com/uliwitness/UliKit/blob/master/NSAttributedString+HTMLFromRange.m)

看起来它能做到你想要的。


是的,我正在考虑这个。最困难的部分将是处理字体,以确定它们是否为粗体、斜体或普通体。我现在可能会尝试一下看看它的运作效果如何。谢谢! - Joshua
太好了,刚刚注意到新链接(似乎SO不会在答案被编辑时通知),它可以完成我想要的一切。非常感谢!(+1 & ✔) - Joshua
@Joshua 这个解决了你的问题吗?似乎NSAttributedString+HTMLFromRange充满了仅适用于OS X的内容,不是吗? - Matthew Frederick
@MatthewFrederick 我从未使用过这个来实现任何东西,但我最后记得看到的是Cocoanetics DTCoreText。它只是用于从HTML获取NSAttributedString,现在还支持从NSAttributedString获取HTML。您可以在Github上找到DTCoreText:https://github.com/Cocoanetics/DTCoreText - Joshua
对于任何需要 Joshua 所说内容的人,可以在这里找到它:https://docs.cocoanetics.com/DTCoreText/Classes/DTHTMLWriter.html。它位于 DTCoreText 中,由于某些原因我之前找不到它,但现在我找到了 :) - Nate Lee

1
使用以下代码。它运行良好。
NSAttributedString *s = ...;
NSDictionary *documentAttributes = @{NSDocumentTypeDocumentAttribute:    NSHTMLTextDocumentType};    
NSData *htmlData = [s dataFromRange:NSMakeRange(0, s.length)    documentAttributes:documentAttributes error:NULL];
NSString *htmlString = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];

这个可以运行,但它创建的是HTML 4格式而不是HTML 5。 - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接