C#.net将HTML转换为RTF

问题描述 投票:6回答:4

还有HTML to RTF Converter for .NET的另一篇文章,但是有没有开源转换器或教程?我不想使用Sautinsoft。我认为在ExpertsExchange有一个解决方案,但我必须为此付出代价。谷歌上的大多数搜索结果都指向RTF到html转换器,但不是html到RTF转换器。

c# html rtf
4个回答
3
投票

ExpertsExchange文章充其量只是一个穷人。 OP基本上放弃了因为他们无法给出一个好的答案。他们列出了CodeProject文章(http://www.codeproject.com/KB/HTML/XHTML2RTF.aspx)的链接,该文章向您展示了如何将HTML转换为RTF,但它并不是真正的.NET解决方案。相反,它将需要高度适应。

根据我的经验,那里没有一个好的开源转换器。这些碎片似乎都在那里,但是它正在等待某人将所有这些组合在一起。但是,你问题的直接答案是那里还没有转换器。


14
投票

创建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。


3
投票

TL; DR:如果可能的话,我建议使用OpenXml格式和HtmlToOpenXml nuget包。


Microsoft Word COM

我没有真正深入研究这个主题,因为我的用例是使用服务器上的功能,这使得COM组件不是一个很好的选择。


XHTML2RTF

正如@IAmTimCorey所提到的,您可以使用此代码项目库。

缺点是:

  • 受支持的HTML和CSS有限
  • 不是.NET
  • ...

Windows窗体Web浏览器

正如@Jerry所提到的,你可以使用Windows Forms WebBrowser控件。

缺点是:

  • 参考System.Windows.Forms
  • 使用复制和粘贴(多线程有问题)
  • 仅适用于STA线程

不支持的功能包括:

  • 字体
  • 颜色
  • 编号列表
  • 删除线(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类型。

未知实际支持的内容。

缺点是:

  • 价钱
  • 一个小东西的很多参考文献
  • 更多?

不支持的功能包括:

  • 删除线(qazxsw po元素)

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找到。

  • here可以从400.- USD到2000.-美元。

licence for this component

  • HTML 3.2
  • HTML 4.01
  • HTML 5
  • CSS
  • XHTML

缺点是:

  • 我不确定开发是多么活跃
  • 价钱

使用知识库:


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

0
投票

似乎有一个基于WPF RichTextBox的新的开源解决方案。唯一需要注意的是它在核心中只支持STAThreaded应用程序,并且为了在ASP.net中使用,你需要在STAThread中调用它(但是在写入中有一个示例)。

为了在VSTO加载项中使用,这被确认可以工作(即Outlook RTFBody)

Nuget:Link to example gist

项目:https://www.nuget.org/packages/MarkupConverter/

撰写:https://github.com/figuemon/MarkupConverter

© www.soinside.com 2019 - 2024. All rights reserved.