Преобразование RTF в обычный текст и из него

У меня есть требование конвертировать обычный текст в RTF (формат RichText) и из него с помощью javascript.

Я ищу функцию для каждого преобразования, и я не хотите использовать библиотеку.

преобразование из простого в RTF

стили форматирования и цвета не важны, все, что имеет значение, это то, что простой текст, который я преобразовал в действительный формат RTF

преобразование из RTF в равнина

опять же, не важно. Они могут быть завершены удалены. Все, что требуется, заключается в том, что все текстовые данные остаются (без потери введенных данных)

2 ответов


Я нашел ответ на C# здесь что было хорошей отправной точкой, но мне нужно было решение Javascript.

нет никакой гарантии, что они на 100% надежны, но они, похоже, хорошо работают с данными, которые я тестировал.

function convertToRtf(plain) {
    plain = plain.replace(/\n/g, "\par\n");
    return "{\rtf1\ansi\ansicpg1252\deff0\deflang2057{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}\n\viewkind4\uc1\pard\f0\fs17 " + plain + "\par\n}";
}

function convertToPlain(rtf) {
    rtf = rtf.replace(/\par[d]?/g, "");
    return rtf.replace(/\{\*?\[^{}]+}|[{}]|\\n?[A-Za-z]+\n?(?:-?\d+)?[ ]?/g, "").trim();
}

вот рабочий пример из них обоих в действии


добавление в ответ Musefan для некоторых шестнадцатеричных символов

function convertToPlain(rtf) {
    rtf = rtf.replace(/\par[d]?/g, "");
    rtf = rtf.replace(/\{\*?\[^{}]+}|[{}]|\\n?[A-Za-z]+\n?(?:-?\d+)?[ ]?/g, "")
    return rtf.replace(/\'[0-9a-zA-Z]{2}/g, "").trim();
}