如何使用JavaScript将HTML转换为RTF

如何使用JavaScript将HTML转换为RTF,javascript,html,plugins,rtf,Javascript,Html,Plugins,Rtf,我有一个带有页眉和页脚的输入HTML文件。 它需要转换为RTF。HTML的页眉/页脚应该在生成的RTF文件中重复 有没有只使用JavaScript将HTML转换为RTF的插件?恐怕没有。我在寻找anyHTML-to-RTF转换器时检查了这一点。不幸的是,它们是稀有的物品 您唯一的选择是基于RTF规范制作一个 您可以使用 但是,它不涉及要点(ul、li元素) 函数转换HTMLTORTF(html){ 如果(!(html的类型==“字符串”&&html)){ 返回null; } var tmpRic

我有一个带有页眉和页脚的输入HTML文件。 它需要转换为RTF。HTML的页眉/页脚应该在生成的RTF文件中重复


有没有只使用JavaScript将HTML转换为RTF的插件?

恐怕没有。我在寻找anyHTML-to-RTF转换器时检查了这一点。不幸的是,它们是稀有的物品

您唯一的选择是基于RTF规范制作一个

您可以使用

但是,它不涉及要点(ul、li元素)

函数转换HTMLTORTF(html){
如果(!(html的类型==“字符串”&&html)){
返回null;
}
var tmpRichText,hasHyperlinks;
var richText=html;
//单件标签
richText=richText.replace(/]*)?\s*[\/]?>/ig,“{\\pard\\brdrb\\brdrs\\brdrw10\\brsp20\\par}\n{\\pard\\par}\n”);
richText=richText.replace(/]*)?\s*[\/]?>/ig,“{\\pard\\par}\n”);
//空标签
richText=richText.replace(/]*)?\s*[\/]>/ig,“{\\pard\\par}\n”);
richText=richText.replace(/]+)\/>/g,“”;
//超链接
richText=richText.replace(
/]*)(?:\s+href=([“'))(?:javascript:void\(0?\);?|#|返回false;?| void\(0?\);?|)\1)(?:\s+[^>]*)?>/ig,
“{{\n”);
tmpRichText=richText;
richText=richText.replace(
/]*)?(?:\s+href=([“'))(.+)\1)(?:\s+[^>]*)?>/ig,
“{\\field{\\*\\fldinst{HYPERLINK\n\“$2\”\n}}{\\fldrslt{\\ul\\cf1\n”);
hasHyperlinks=richText!==tmpRichText;
richText=richText.replace(/]*)?>/ig,“{{{\n”);
richText=richText.replace(/]*)?>/ig,“\n}”);
//开始标签
richText=richText.replace(/]*)?>/ig,“{\\b\n”);
richText=richText.replace(/]*)?>/ig,“{\\i\n”);
richText=richText.replace(/]*)?>/ig,“{\\ul\n”);
richText=richText.replace(/]*)?>/ig,“{\\strike\n”);
richText=richText.replace(/]*)?>/ig,“{\\super\n”);
richText=richText.replace(/]*)?>/ig,“{\\sub\n”);
richText=richText.replace(/]*)?>/ig,“{\\pard\n”);
//结束标记
richText=richText.replace(/]*)?>/ig,“\n\\par}\n”);
richText=richText.replace(/]*)?>/ig,“\n}”);
//去除任何其他剩余的HTML标记[但保留其内容]
richText=richText.replace(/]+)>/g,“”;
//用必要的语法作为富文本的前缀和后缀
richText=
“{\\rtf1\\ansi\n”+(hasHyperlinks?”{\\colortbl\n;\n\\red0\\green0\\blue255;\n}\n:”)+richText+“\n}”;
返回richText;
}

经过一番搜索,我找到了一个可行的解决方案:

通过
html到rtf
的转换很容易(下面是一段基于browserify的代码):

var htmlToRtf=require('html-to-rtf');
var htmlText=“…”;//或任何要转换的html
var htmlAsRtf=htmlToRtf.convertHtmlToRtf(htmlText);//转换为rtf的html

这个解决方案对我很有效。如果不使用browserify,你必须在下载的模块中找到隐含的
js
,并将它们链接到你的html页面。

我应用了@Samra解决方案,效果很好。但后来我发现输出中有一个错误:一些文本被切断。经过大量调查,似乎是关于HTML注释(
)处理不正确。我的解决方案是将此richText转换添加为第一个转换:

// Delete HTML comments
richText = richText.replace(/<!--[\s\S]*?-->/ig,"");
//删除HTML注释
richText=richText.replace(//ig,“”);
var htmlToRtf = require('html-to-rtf');
var htmlText = "<div>...</div>"; //or whatever html you want to transform
var htmlAsRtf = htmlToRtf.convertHtmlToRtf(htmlText); // html transformed to rtf
// Delete HTML comments
richText = richText.replace(/<!--[\s\S]*?-->/ig,"");