Преобразование из HTML в NSAttributedString неправильные атрибуты - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь сохранить NSAttributedString на сервере, и когда мне это нужно, вернуть его со всеми атрибутами

После часа поиска я нашел этот код

extension NSAttributedString {
var toHTML: String {
    let documentAttributes = [NSAttributedString.DocumentAttributeKey.documentType: NSAttributedString.DocumentType.html]
    do {
        let htmlData = try self.data(from: NSRange(location: 0, length: self.length), documentAttributes:documentAttributes)
        if let htmlString = String(data:htmlData, encoding:String.Encoding.utf8) {
            return htmlString
        }
    }
    catch {
        print("error creating HTML from Attributed String")
        return ""
    }
    return ""
}

extension String {
var fromHTML: NSAttributedString {
    guard let data = data(using: .utf8) else { return NSAttributedString() }
    do {
        return try NSAttributedString(data: data, options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
    } catch {
        return NSAttributedString()
    }
}

Когда мне нужно преобразовать NSAttributedString в формат HTML, он делает это правильно

"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<meta http-equiv=\"Content-Style-Type\" content=\"text/css\">\n<title></title>\n<meta name=\"Generator\" content=\"Cocoa HTML Writer\">\n<style type=\"text/css\">\np.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 20.0px Palatino}\nspan.s1 {font-family: \'Palatino\'; font-weight: bold; font-style: normal; font-size: 20.00pt}\n</style>\n</head>\n<body>\n<p class=\"p1\"><span class=\"s1\">Hello world</span></p>\n</body>\n</html>\n"

Но когда я пытаюсь отформатировать его обратно до NSAttributedString, он меняет фактический размер шрифта

Hello world{
NSColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSFont = "<UICTFont: 0x121d04440> font-family: \"Palatino\"; font-weight: bold; font-style: normal; font-size: 26.67pt";
NSKern = 0;
NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 31/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 36, Blocks (\n), Lists (\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";
NSStrokeColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSStrokeWidth = 0;
}

Что я здесь не так делаю? *

...