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格式。
简而言之: 我建议尽可能使用 OpenXml
格式和 HtmlToOpenXml
nuget 包。
Microsoft Word COM
我没有对这个话题进行过深入的研究,因为我的用例是在服务器上使用功能,这使得 COM 组件不是一个很好的选择。
XHTML2RTF
如 @IAmTimCorey 所提到的,您可以使用此 codeproject 库。
缺点包括:
Windows Forms Web Browser
如 @Jerry 所提到的,您可以使用 Windows Forms WebBrowser
控件。
缺点包括:
不支持的特性包括:
del
元素)DevExpress
devexpress 支持中心 的 "Paul V" 的代码示例。(03.02.2015)
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
类型,如此示例所示。
未知支持哪些实际功能。
缺点包括:
不支持的功能包括:
del
元素)Sautinsoft
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();
}
缺点如下:
使用知识库:
自制
如果您只想支持有限的功能,可以编写自己的转换器。如果支持的功能集太大,我不建议这样做。(Sautinsoft声称已编写超过20,000行代码)。
我有一个小示例项目,但当前仅供教育目的。
OpenXml
如果OpenXml格式也适用于您的用例,则可以使用HtmlToOpenXml nuget包。它是免费的,并且支持我测试其他解决方案的所有功能。
该项目基于Microsoft的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();
}
}
Nuget: https://www.nuget.org/packages/MarkupConverter/
Project: https://github.com/figuemon/MarkupConverter
Writeup: https://code.msdn.microsoft.com/Converting-between-RTF-and-aaa02a6e