将RTF转换为纯文本并将纯文本转换为RTF

12
我有一个需求,需要使用JavaScript将纯文本转换为RTF(RichText Format),并将RTF转换为纯文本。
我正在寻找两个独立的函数来完成转换,而不是使用库。
纯文本转换为RTF:
格式样式和颜色并不重要,唯一重要的是将纯文本转换为有效的RTF格式。
RTF转换为纯文本:
同样,样式也不重要,可以完全删除。所需的全部是所有文本数据都保留下来,没有任何输入数据丢失。
2个回答

14

我在这里找到了一个关于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();
}

这里是它们同时运作的工作示例


这里有 lazygyu 开发的 JavaScript RTF 解析器,您可以在这里找到:https://github.com/lazygyu/RTF-parser。 - Kaiido
2
这对于Unicode输入(非英语字符,印刷体引号等)效果不佳。 - mirabilos
@mirabilos:是的,我本来就预料到会出现那样的问题。不幸的是,我对RTF格式了解的不够深入,无法提供更加稳健的方案。 - musefan
rtf.replace(/\'[0-9a-zA-Z]{2}/g, "").trim(); 将删除一些不必要的 Unicode 字符。 - Tjad Clark
1
@TjadClark 那些 Unicode 字符是需要并且希望在输出中能够正确表示的。 - mirabilos
显示剩余2条评论

0

在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();
}

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