C#.net将HTML转换为RTF

时间:2011-05-07 16:57:11

标签: c# html rtf

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

4 个答案:

答案 0 :(得分: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。

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

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

Microsoft Word COM

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

<强> XHTML2RTF

正如@IAmTimCorey所提到的,你可以使用这个代码项目库。

缺点是:

  • 受限制的HTML和CSS
  • 不是.NET
  • ...

Windows窗体Web浏览器

正如@Jerry所提到的,您可以使用Windows窗体WebBrowser控件。

缺点是:

  • 对System.Windows.Forms的引用
  • 使用copy&amp;粘贴(多线程有问题)
  • 仅适用于STA线程

不支持的功能包括:

  • 字体
  • 颜色
  • 编号列表
  • 删除线(del元素)
  • ...

<强>的DevExpress

&#34; Paul V&#34;的代码示例来自devexpress support center。 (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();
}

或者您可以使用this example中显示的RichEditDocumentServer类型。

未知实际支持的内容。

缺点是:

  • 价格
  • 很多关于一件小事的参考文献
  • 更多?

不支持的功能包括:

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

可以找到更多示例和配置选项herehere

Supported is the following

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

缺点是:

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

使用知识库:

<强> DIY

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

我有一个小sample project here,但目前仅用于教育目的。

<强> OPENXML

如果您的用例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();
    }
}

答案 3 :(得分:0)

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

对于在VSTO加载项中使用,已确认可以正常工作(即Outlook RTFBody)

Nuget: https://www.nuget.org/packages/MarkupConverter/

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

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