还有HTML to RTF Converter for .NET的另一篇文章,但是有没有开源转换器或教程?我不想使用Sautinsoft。我认为在ExpertsExchange有一个解决方案,但我必须为此付出代价。谷歌上的大多数搜索结果都指向RTF到html转换器,但不是html到RTF转换器。
ExpertsExchange文章充其量只是一个穷人。 OP基本上放弃了因为他们无法给出一个好的答案。他们列出了CodeProject文章(http://www.codeproject.com/KB/HTML/XHTML2RTF.aspx)的链接,该文章向您展示了如何将HTML转换为RTF,但它并不是真正的.NET解决方案。相反,它将需要高度适应。
根据我的经验,那里没有一个好的开源转换器。这些碎片似乎都在那里,但是它正在等待某人将所有这些组合在一起。但是,你问题的直接答案是那里还没有转换器。
创建WebBrowser。加载html内容。选择全部并从中复制。粘贴到richtextbox中。然后你有RTF
string html = "...."; // html content
RichTextBox rtbTemp = new RichTextBox();
WebBrowser wb = new WebBrowser();
wb.Navigate("about:blank");
wb.Document.Write(html);
wb.Document.ExecCommand("SelectAll", false, null);
wb.Document.ExecCommand("Copy", false, null);
rtbTemp.SelectAll();
rtbTemp.Paste();
现在rtbTemp.RTF具有从HTML转换的RTF。
TL; DR:如果可能的话,我建议使用OpenXml
格式和HtmlToOpenXml
nuget包。
Microsoft Word COM
我没有真正深入研究这个主题,因为我的用例是使用服务器上的功能,这使得COM组件不是一个很好的选择。
XHTML2RTF
正如@IAmTimCorey所提到的,您可以使用此代码项目库。
缺点是:
Windows窗体Web浏览器
正如@Jerry所提到的,你可以使用Windows Forms WebBrowser
控件。
缺点是:
不支持的功能包括:
del
元素)DevExpress的
来自devexpress support center的“Paul V”代码示例。 (2015年3月2日)
public String ConvertRTFToHTML(String RTF)
{
MemoryStream ms = new MemoryStream();
StreamWriter writer = new StreamWriter(ms);
writer.Write(RTF);
writer.Flush();
ms.Position = 0;
String output = "";
HtmlEditorExtension.Import(HtmlEditorImportFormat.Rtf, ms, (s, enumerable) => output = s);
return output;
}
public String ConvertHTMLToRTF(String Html)
{
MemoryStream ms = new MemoryStream();
var editor = new ASPxHtmlEditor { Html = html };
editor.Export(HtmlEditorExportFormat.Rtf, ms);
ms.Position = 0;
StreamReader reader = new StreamReader(ms);
return reader.ReadToEnd();
}
或者您可以使用RichEditDocumentServer
中显示的this example类型。
未知实际支持的内容。
缺点是:
不支持的功能包括:
Sautinsoft
del
更多示例和配置选项可以在public string ConvertHTMLToRTF(string html)
{
SautinSoft.HtmlToRtf h = new SautinSoft.HtmlToRtf();
return h.ConvertString(htmlString);
}
public string ConvertRTFToHTML(string rtf)
{
SautinSoft.RtfToHtml r = new SautinSoft.RtfToHtml();
byte[] bytes = Encoding.ASCII.GetBytes(rtf);
r.OpenDocx(bytes );
return r.ToHtml();
}
和here找到。
缺点是:
使用知识库:
DIY
如果您只想支持有限的功能,您可以编写自己的转换器。如果支持的功能集太大,我不建议这样做。 (Sautinsoft声称已经写了超过20,000行的代码)。
我有一个小的trix angular editor,但仅用于目前的教育目的。
OPENXML
如果sample project here也适用于您的用例,您可以使用OpenXml format。它是免费的,并且支持我测试过其他解决方案的所有功能。
HtmlToOpenXml nuget package基于微软的The project,似乎很活跃。
Open Xml SDK
public static byte[] ConvertHtmlToOpenXml(string html)
{
using (var generatedDocument = new MemoryStream())
{
using (var package = WordprocessingDocument.Create(generatedDocument, WordprocessingDocumentType.Document))
{
var mainPart = package.MainDocumentPart;
if (mainPart == null)
{
mainPart = package.AddMainDocumentPart();
new Document(new Body()).Save(mainPart);
}
var converter = new HtmlConverter(mainPart);
converter.ParseHtml(html);
mainPart.Document.Save();
}
return generatedDocument.ToArray();
}
}
似乎有一个基于WPF RichTextBox的新的开源解决方案。唯一需要注意的是它在核心中只支持STAThreaded应用程序,并且为了在ASP.net中使用,你需要在STAThread中调用它(但是在写入中有一个示例)。
为了在VSTO加载项中使用,这被确认可以工作(即Outlook RTFBody)
Nuget:Link to example gist