【问题标题】:How do i convert NSAttributedString into HTML string?如何将 NSAttributedString 转换为 HTML 字符串?
【发布时间】:2011-03-14 11:54:18
【问题描述】:

正如标题所示,现在我可以简单地将 HTML 转换为 NSAttributedString 和 initWithHTML:documentAttributes: ,但我想要在这里做的是相反的。 是否有任何第三方库可以实现这一目标?

   @implementation NSAttributedString(HTML)
-(NSString *)htmlForAttributedString{
    NSArray * exclude = [NSArray arrayWithObjects:@"doctype",
                         @"html",
                         @"head",
                         @"body",
                         @"xml",
                         nil
                         ];
    NSDictionary * htmlAtt = [NSDictionary
                              dictionaryWithObjectsAndKeys:NSHTMLTextDocumentType,
                              NSDocumentTypeDocumentAttribute,
                              exclude,
                              NSExcludedElementsDocumentAttribute,
                              nil
                              ];
    NSError * error;
    NSData * htmlData = [self dataFromRange:NSMakeRange(0, [self length])
                               documentAttributes:htmlAtt error:&error
                         ];
        //NSAttributedString * htmlString = [[NSAttributedString alloc]initWithHTML:htmlData documentAttributes:&htmlAtt];
    NSString * htmlString = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];
    return htmlString;
}
@end

【问题讨论】:

  • 标题询问如何将HTML转换为NSAttributeString,而问题反之亦然。
  • 您发布的代码到底有什么问题?它应该可以工作。

标签: html cocoa nsattributedstring


【解决方案1】:

使用 dataFromRange:documentAttributes: 并将文档类型属性 (NSDocumentTypeDocumentAttribute) 设置为 HTML (NSHTMLTextDocumentType):

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];

【讨论】:

  • 如果文本包含链接,则不会为链接创建 href。
  • 我只需要在我的 HTML 中使用粗体、斜体、下划线和 StrikeThrough 标签,但是将 NSAttributedString 转换为 HTML 会输出大量的 css 来实现这一点。有什么办法可以让这个简单吗?
  • @ilight 。您是否找到了获取粗斜体和下划线的 HTML 标签的解决方案
  • 我面临的最大问题是,当我使用这个时,内容的字体大小越来越大,为什么我不知道但它几乎翻了一番
  • 有没有人找到一种方法从NSAttributedString.DocumentType.html 转换中获得更清晰/自定义的 HTML?
【解决方案2】:

这是@omz 答案的 swift 4 转换,希望对登陆这里的人有用

extension NSAttributedString {
    var attributedString2Html: String? {
        do {
            let htmlData = try self.data(from: NSRange(location: 0, length: self.length), documentAttributes:[.documentType: NSAttributedString.DocumentType.html]);
            return String.init(data: htmlData, encoding: String.Encoding.utf8)
        } catch {
            print("error:", error)
            return nil
        }
    }
}

【讨论】:

    猜你喜欢
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2015-12-03
    • 2016-02-23
    • 2012-11-07
    • 2014-03-12
    • 1970-01-01
    相关资源
    最近更新 更多