Pergunta

Eu já vi muitos posts sobre o local para RTF para HTML e alguns outros lugares falando sobre algum HTML para conversores RTF, mas eu realmente estou tentando obter uma lista completa do que é considerado o comercial mais utilizado produto, produto de código aberto ou se as pessoas recomendo ir cultivado em casa. Desculpas se você considerar isso uma questão duplicado, mas eu estou tentando criar uma matriz de produto para ver qual é a mais viável para a nossa aplicação. Eu também acho que isso seria útil para os outros.

O conversor seria usado em uma aplicação ASP.NET 2.0 (estamos a atualização para 3.5 em breve, mas ainda degola com WebForms) usando SQLServer 2005 (logo 2008) como o DB.

A partir de ler algumas mensagens, SautinSoft parece ser popular como uma componente comercial. Existem outros componentes comerciais que você recomendaria para converter HTML para RTF? Preço importa, mas mesmo que seja um pouco sobre o lado caro, por favor liste-lo.

Para código aberto, eu li que OpenOffice.org pode ser executado como um serviço para que ele possa converter arquivos. No entanto, este parece ser apenas com base Java. Eu imagino, eu precisaria de algum tipo de interoperabilidade para usar isso? O .NET componentes de código aberto, se houver, estão lá fora para converter HTML para RTF?

Para crescido em casa, é um XSLT o caminho a percorrer com XHTML? Se assim for, o componente que você recomenda para gerar XHTML? Caso contrário, o que outra casa avenuses crescido você recomenda.

Além disso, observe que eu atualmente não se importa tanto com RTF para HTML. Se um comercial ofertas de componentes este eo preço ainda é o mesmo, tudo bem, caso contrário, por favor, não mencioná-lo.

Foi útil?

Solução

Eu recomendo fazê-lo a si mesmo como a tarefa não é realmente complexa. Em primeiro lugar, o mais fácil formato XML de uma maneira converter em outro formato XML é com um XSLT. Converter documentos XML em C # é super fácil.

Aqui está uma boa MSDN blog para você começar. Mike sequer menciona que era mais fácil de fazer isso com a mão que lidar com um terceiro.

ligação

Na verdade, eu já respondi a essa pergunta aqui . Acho que faz deste um duplicado.

Outras dicas

Para que o seu valor e em nenhuma ordem particular.

Um tempo atrás eu queria exportação para RTF e, em seguida, importação de RTF o RTF em questão sendo manipulados por MS Word.

O primeiro problema é RTF não é um padrão aberto. É uma MS internos padrão e Lá na frente eles alterá-lo como e quando eles gostam e geralmente não se preocupar com a compatibilidade. Atualmente, as versões de RTF são 1,3 a 1,9 e eles são todos diferentes. Internamente eles usam twips para medição apenas para uma boa medida.

Eu comprei o livro de bolso O'Reilly sobre o assunto que ajudou e ler um monte de documentação MS que é bom, mas há um monte de-lo e lotes para cada versão.

Devido à forma como RTF é codificado usando regex para manipular é incrivelmente trabalho duro e necessita de tratamento e concentração cuidado de teste e começar a trabalhar. Eu uso um editor de Mac que tinha construído em regex para que eu pudesse constantemente testar cada seção e construí-lo no código.

Por causa do número de versões, há também um monte de incompatibilidade entre as versões, mas há um monte de comunalidade e no final era razoavelmente difícil / fácil de chegar onde eu queria (após cerca de uma leitura semanas e semanas de codificação ) e produzir uma versão muito simples.

Eu nunca encontrou uma solução comercial, mas eu tinha que ter um livre no por causa do orçamento para que corte muito fora, mas ter muito cuidado em escolher um para se certificar de que ele faz o que você quer e tem apoio.

Eu não acho que você está vindo de / / CSV HTML XML XHTML, eu estava convertendo, é o RTF.

Eu não tenho certeza se eu aconselharia a DIY ou comprar. Provavelmente no balanço DIY, mas suas próprias circunstâncias irá ditar isso.

Edit:. Uma coisa que vai de conteúdo para RTF é mais fácil do que vice-versa

MS BTW não criticando fior as versões RTF, hey que é deles e de propriedade para que eles possam fazer o que eles gostam.

Eu deparei com este editor de texto rico WYSIWYG (RTE) para a web que também tem um HTML ao conversor de RTF, bonito editor for .NET . Alguém tem alguma experiência com este componente? A minha principal experiência para baseadas na web RTEs ter sido CKEditor (FCKEditor) e TinyMCE mas tanto quanto eu posso dizer CKEditor e TinyMCE não tem HTML para conversores RTF construído em.

Desde que eu sou obrigado a implementar algumas capacidades MailMerge com rich-text formatação em um aplicativo Web, eu pensei que seria bom para compartilhar minhas experiências.

Basicamente, eu explorei duas alternativas:

  • usando o Google Docs API para aproveitar os recursos do Google Docs
  • usando XSLT, como mostrado na este ensaio

O Google Docs API funciona bem. O problema é que, quando você carrega um documento HTML com quebras de página, como este:

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

e pedir ao Google para converter o doc em RTF, você perde todas as quebras, o que não se encaixam minhas necessidades. No entanto, se as quebras de página não são um problema para você, você pode verificar esta solução fora.

A solução XSLT funciona ... mais ou menos.

Ele funciona se você faz referência objeto MSXML3 COM diretamente, ignorando classes System.XML. Caso contrário, eu não poderia fazê-lo funcionar. Além disso, parece honrar todos, mas básico formatação e marcas, desconsiderando a cor do texto, tamanho e assim por diante. No entanto, ele homenageia as quebras de página. :-)

Aqui está uma biblioteca rápida que eu escrevi, usando tidy.net a força de HTML para conversão XHTML. Espero que ajude.

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



}

TL; DR:. Eu recomendo usar o formato OpenXml eo pacote HtmlToOpenXml NuGet se possível


Microsoft Word COM

Eu realmente não tenho pesquisado muito a este tópico como uma meu caso de uso é usar a funcionalidade em um servidor que faz componentes COM não uma grande seleção.


XHTML2RTF

Como @IAmTimCorey mencionado você pode usar esta biblioteca codeproject.

As desvantagens são:

  • Limitada suportado HTML e CSS
  • Não realmente .NET
  • ...

Windows Forms navegador Web

Como @Jerry mencionado você pode usar o Windows Forms controle WebBrowser.

As desvantagens são:

  • A referência a System.Windows.Forms
  • Usos copiar e colar (problemático para multithreading)
  • Apenas funciona em um segmento STA

recursos não suportados incluem:

  • Fontes
  • Cores
  • As listas numeradas
  • tachado (elemento del)
  • ...

DevExpress

Exemplo de código de "Paul V" do DevExpress centro de suporte . (2015/02/03)

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

Ou você pode usar o tipo de RichEditDocumentServer como mostrado na neste exemplo .

desconhecido o que realmente é suportado.

As desvantagens são:

  • Preço
  • Um monte de referências para uma coisa pequena
  • Mais?

recursos não suportados incluem:

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

Mais exemplos e opções de configuração podem ser encontrados aqui e aqui .

suportado é o seguinte :

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

As desvantagens são:

  • Eu não tenho certeza quão ativo o desenvolvimento é
  • Preço

Uso da base de conhecimento:


DIY

Se você só queria apoiar funcionalidade limitada você pode escrever seu próprio conversor. Eu não recomendaria isso, se o conjunto de recursos suportado é muito grande.

Eu tenho um pequeno href="https://github.com/NtFreX/HtmlToRtfConverter" rel="nofollow projeto de exemplo aqui mas é apenas para fins educacionais em seu estado atual.


OpenXml

Se o OpenXml formato também é ok para o seu caso de uso você cum usar o pacote HtmlToOpenXml NuGet . É grátis e se suportam todas as funcionalidades que eu testei as outras soluções contra.

O projeto é baseado no Open XML SDK pela Microsoft e parece ativo.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top