C# .net 将 HTML 转换为 RTF

本文关键字:RTF 转换 HTML net | 更新日期: 2023-09-27 17:55:34

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

C# .net 将 HTML 转换为 RTF

创建一个 WebBrowser。用 html 内容加载它。全选并从中复制。粘贴到富格文本框中。然后你就有了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 格式和 nuget 包HtmlToOpenXml

<小时 />

Microsoft 字 COM

我并没有真正搜索这个主题,因为我的用例是在服务器上使用该功能,这使得 COM 组件不是一个很好的选择。

<小时 />

XHTML2RTF

如@IAmTimCorey所述,您可以使用此代码项目库。

缺点是:

  • 支持的 HTML 和 CSS 有限
  • 不是真正的.NET
<小时 />

视窗窗体 Web 浏览器

如@Jerry所述,您可以使用 Windows 窗体WebBrowser控件。

缺点是:

  • 对 System.Windows.Forms 的引用
  • 使用复制和粘贴(多线程有问题)
  • 仅在 STA 线程中工作

不支持的功能包括:

  • 字体
  • 颜色
  • 编号列表
  • 删除线(del元素)
<小时 />

开发快递

来自 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 类型,如本示例所示。

  • devexpress的许可证费用从1500美元到2200美元不等。

不知道实际支持什么。

缺点是:

  • 价格
  • 一件小事的参考文献相当多
  • 更多?

不支持的功能包括:

  • 打击槽(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();
}

可在此处和此处找到更多示例和配置选项。

  • 此组件的许可证费用从 400.- 美元到 2000.- 美元不等。

支持如下:

  • HTML 3.2
  • HTML 4.01
  • 网页 5
  • .CSS
  • .XHTML

缺点是:

  • 我不确定开发有多活跃
  • 价格

使用知识库:

  • 从trix角度编辑器转换编号列表会破坏indend
<小时 />

自己动手

如果您只想支持有限的功能,则可以编写自己的转换器。如果支持的功能集太大,我不建议这样做。(Sautinsoft声称已经编写了超过20'000行代码)。

我这里有一个小的示例项目,但目前仅用于教育目的。

<小时 />

OpenXml

如果 OpenXml 格式也适合您的用例,您可以使用 HtmlToOpenXml nuget 包。它是免费的,并且确实支持我测试过其他解决方案的所有功能。

该项目基于微软的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();
    }
}
<小时 />
  • 链接到示例要点

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

根据我的经验,没有一个好的开源转换器。 这些碎片似乎都在那里,但它正在等待有人做将它们放在一起的跑腿工作。 但是,您的问题的直接答案是那里还没有转换器。

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

对于在 VSTO 加载项中使用,已确认其工作(即。展望RTFBody)

掘金:https://www.nuget.org/packages/MarkupConverter/

项目:https://github.com/figuemon/MarkupConverter

写法:https://code.msdn.microsoft.com/Converting-between-RTF-and-aaa02a6e