我已经看过很多的员额在网站上RTF HTML和其他一些员额在谈论一些HTML RTF转换器,但是我真的很想获得一个完全的崩溃是什么认为是最广泛使用的商用产品,开放源代码产品或者如果有人让你回家的增长。道歉如果你认为这是一个重复问题,但我在试图建立一个产品矩阵看到什么是最可行的,用于我们的应用程序。我还认为这将有助于他人。

转换器将被用于ASP.NET 2.0应用程序(我们升级到3.5不久但仍然坚持web表单)使用Sql server2005年的(很快2008)作为数据库。

从读了几章, SautinSoft 似乎受欢迎,作为一个商业的组成部分。是否还有其他商业组件,可你会推荐用于转换HTML RTF?价格不重要,但是即使它是一个小昂贵的一面,请列出。

用于开放源,我读 OpenOffice.org 可以运行为的服务,以便使它可以转换的文件。然而,这似乎是唯一Java基础。我想,我需要某种形式的互操作使用这个吗?什么。网开放源的部件,如果有的话,有的用于转换HTML RTF?

对于家庭长大的,是XSLT的路要走XHTML?如果是这样,什么样的组件做你建议用于产生XHTML?否则,有什么其他的家庭长大的avenuses做你的推荐。

此外,请注意,目前我不在乎那么多关于RTF to HTML。如果一个商业的组成部分提供本和价格仍然是一样的,好的,否则别这么说

有帮助吗?

解决方案

我会让你做你自己的任务不是真的那么复杂。首先,最简单的方式将一种Xml格式转换成另一种Xml格式是与一个Xslt。转换Xml文件中的C#是超级容易。

这里是一个很好的msdn博客让你开始。迈克即使提到,它是比较容易做到这一方面,处理与第三方。

链接

实际上,我已经回答了这个问题 在这里,.猜测,使得这种重复。

其他提示

有关什么它的价值并没有特定的顺序。

前一段我想导出到RTF,然后从RTF导入有问题的RTF通过MS Word中被操纵。

第一个问题是RTF没有一个开放的标准。这是一个内部MS标准,还有前他们改变它,当他们喜欢和不普遍担心兼容性。目前RTF的版本是1.3到1.9,而且都是不同的。内部他们使用缇只是良好的措施的测量。

我买了这帮助和阅读了大量的MS文档,这是很好的主题O'Reilly的袖珍书,但它的很多很多的一个版本。

由于存在RTF使用正则表达式来操纵编码方式

是非常艰苦的工作,需要谨慎处理和浓度测试,并开始工作。我使用了内置的正则表达式,所以我可以不断测试每个部分,并将其打造成为一个代码编辑器的Mac

由于版本的数量也有很多版本之间不兼容的,但有很多共性的,最后它是合理的硬/易得,其中我想(约一个星期看完之后和一个星期编码)并产生一个非常简单的版本。

我从来没有发现一个商业解决方案,但我不得不对由于预算的自由,这样砍掉了很多了,但在选择一个,以确保它你想要做什么,并具有支持采取非常谨慎的。

我不认为你在哪里HTML / XML / XHTML的到来,我被转换CSV格式,它的RTF。

我不知道如果我会建议DIY或购买。大概在平衡自己动手做,但你自己的情况将决定了。

编辑:一两件事从内容到RTF去比反之亦然更容易

BTW不是批评MS FIOR的RTF版本,嘿它的理智,私有的,因此他们可以做他们喜欢什么。

我只是碰到了这种网络所见即所得的富文本编辑器(RTE)也有一个HTML到RTF转换过来,可爱编辑器.NET 。有没有人有这个组件的经验吗?我对基于Web的实时评价的主要经验已经CKEditor的(FCKEDITOR)和TinyMCE的,但据我可以告诉CKEditor的和TinyMCE的不具有HTML内置的RTF转换器。

由于我需要在 Web 应用程序上实现一些具有富文本格式的邮件合并功能,因此我认为分享我的经验会很好。

基本上,我探索了两种选择:

  • 使用 Google Docs API 来利用 Google Docs 功能
  • 使用 XSLT,如图所示 这篇文章

Google Docs API 运行良好。问题是,当您上传带有分页符的 HTML 文档时,如下所示:

<p style="page-break-before:always;display:none;"/>

并要求 Google 将文档转换为 RTF,您会丢失所有中断,这不符合我的要求。但是,如果分页符对您来说不是问题,您可以查看此解决方案。

XSLT 解决方案有效...有点。

如果您绕过 System.Xml 类直接引用 MSXML3 COM 对象,它就会起作用。否则我无法让它发挥作用。此外,它似乎尊重除基本格式和标签之外的所有内容,而忽略文本颜色、大小等。但是,它尊重分页符。:-)

这是我编写的一个快速库,使用 tidy.net 强制 HTML 到 XHTML 的转换。希望能帮助到你。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ADDS.Mailmerge
{

    public class XHTML2RTF
    {

        MSXML2.FreeThreadedDOMDocument _xslDoc;
        MSXML2.FreeThreadedDOMDocument _xmlDoc;
        MSXML2.IXSLProcessor _xslProcessor;
        MSXML2.XSLTemplate _xslTemplate;
        static XHTML2RTF instance = null;
        static readonly object padlock = new object();

        XHTML2RTF()
        {
            _xslDoc = new MSXML2.FreeThreadedDOMDocument();
            //XSLData.xhtml2rtf is a resource file 
            // containing XSL for transformation
            // I got XSL from here: 
            // http://www.codeproject.com/KB/HTML/XHTML2RTF.aspx
            _xslDoc.loadXML(XSLData.xhtml2rtf);
            _xmlDoc = new MSXML2.FreeThreadedDOMDocument();
            _xslTemplate = new MSXML2.XSLTemplate();
            _xslTemplate.stylesheet = _xslDoc;
            _xslProcessor = _xslTemplate.createProcessor();
        }

        public string ConvertToRTF(string xhtmlData)
        {
            try
            {
                string sXhtml = "";
                TidyNet.Tidy tidy = new TidyNet.Tidy();
                tidy.Options.XmlOut = true;
                tidy.Options.Xhtml = true;
                using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xhtmlData)))
                {
                    StringBuilder sb = new StringBuilder();
                    using (MemoryStream sw = new MemoryStream())
                    {
                        TidyNet.TidyMessageCollection messages = new TidyNet.TidyMessageCollection();
                        tidy.Parse(ms, sw, messages);
                        sXhtml = Encoding.UTF8.GetString(sw.ToArray());
                    }
                }

                _xmlDoc.loadXML(sXhtml);
                _xslProcessor.input = _xmlDoc;
                _xslProcessor.transform();
                return _xslProcessor.output.ToString();
            }
            catch (Exception exc)
            {
                throw new Exception("Error in xhtml conversion. ", exc);
            }
        }

        public static XHTML2RTF Instance
        {
            get
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new XHTML2RTF();
                    }
                    return instance;
                }
            }
        }
    }



}

长话短说: 我建议使用 OpenXml 格式和 HtmlToOpenXml nuget 包(如果可能)。


微软Word COM

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


XHTML2RTF

作为 @IAmTimCorey 提到 您可以使用此 codeproject 库。

缺点是:

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

Windows 窗体 Web 浏览器

作为 @Jerry提到 您可以使用 Windows 窗体 WebBrowser 控制。

缺点是:

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

不支持的功能包括:

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

开发快递

“Paul V”的代码示例来自 devexpress 支持中心. (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 元素)

绍廷软件

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

可以找到更多示例和配置选项 这里这里.

支持的是以下:

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

缺点是:

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

使用知识库:


DIY

如果您只想支持有限的功能,您可以编写自己的转换器。如果支持的功能集太大,我不会推荐这样做。

我有一个小 示例项目在这里 但在当前状态下仅用于教育目的。


OpenXml

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

该项目 是基于 打开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();
    }
}

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top