Question

J'ai déjà vu beaucoup de messages sur le site pour RTF en HTML et de certains autres postes de parler de certains HTML au format RTF, les convertisseurs, mais je vais vraiment essayer d'obtenir un portrait complet de ce qui est considéré comme le plus largement utilisé, produit commercial, produit open source ou si les gens vous recommandons d'aller cultivés à la maison.Toutes mes excuses si vous considérez que c'est une double question, mais je suis en train de créer un produit de la matrice de voir ce qui est le plus viable pour notre application.Je pense également que ce serait utile pour les autres.

Le convertisseur peut être utilisé dans une ASP.NET 2.0 application (nous sommes de la mise à niveau à 3,5 peu de temps, mais encore s'en tenir avec les Formulaires web) à l'aide de sql server 2005 (dès 2008) que la DB.

À la lecture de quelques posts, SautinSoft semble être populaire comme une composante commerciale.Existe-il d'autres composants commerciaux qui vous le recommande pour la conversion de HTML RTF?Le prix n'est pas anodin, mais même si c'est un peu cher sur le côté, merci de l'inscrire.

Pour l'open source, j'ai lu que OpenOffice.org peut être exécuté en tant que service, de sorte qu'il peut convertir les fichiers.Toutefois, cela semble être uniquement basé sur Java.J'imagine, j'avais besoin d'une sorte d'interopérabilité pour l'utiliser?Qu'est-ce .NET des composants open source, le cas échéant, à conversion HTML, RTF?

Pour les cultivés à la maison, est une transformation XSLT le chemin à parcourir avec le XHTML?Si oui, quel est le composant recommandez-vous pour générer du XHTML?Sinon, quels autres cultivés à la maison avenuses recommandez-vous.

Aussi, veuillez noter que j'ai actuellement ne se soucient pas tellement sur RTF en HTML.Si une composante commerciale offre ce et le prix est toujours le même, fine, sinon, s'il vous plaît ne pas le mentionner.

Était-ce utile?

La solution

Je voudrais vous recommandons de le faire vous-même en tant que la tâche n'est pas vraiment plus complexe.Tout d'abord, la façon la plus facile de convertir un format Xml dans un autre format Xml est avec une transformation Xslt.La conversion de documents Xml en C# est super facile.

Voici un bon msdn post de blog pour vous aider à démarrer.Mike mentionne même qu'il était plus facile de le faire à la main que de traiter avec un tiers.

lien

En fait, j'ai déjà répondu à cette question ici.Devinez qui en fait un double.

Autres conseils

Pour ce que sa vaut la peine et dans aucun ordre particulier.

Il y a un moment que je voulais l'exportation au format RTF et importer ensuite de la RTF RTF en question d'être manipulés par MS Word.

Le premier problème est le format RTF est pas un standard ouvert.C'est un MS standard et donc ils modifient il comme et quand ils veulent et ne sont généralement pas vous soucier de la compatibilité.Actuellement les versions de RTF sont de 1,3 à 1,9 et ils sont tous différents.En interne, ils utilisent twips pour la mesure, pour faire bonne mesure.

J'ai acheté le O'Reilly livre de poche sur le sujet qui ont aidé et lu beaucoup de choses de la MS de la documentation qui est bon, mais il y a beaucoup de et des lots pour chaque version.

En raison de la façon RTF est codée à l'aide de regex pour manipuler est très dur travail et convient d'être prudent dans la manipulation et de la concentration de test et obtenir de travailler.J'utilise un Mac, l'éditeur qui l'avait construit en regex afin que je puisse cessé de test de chaque section et de l'intégrer dans le code.

En raison du nombre de versions il y a aussi beaucoup d'incompatibilité entre les versions, mais il y a beaucoup de choses en commun et à la fin c'était assez dur/facile d'arriver là où je voulais (après environ une semaine de la lecture et de l'une des semaines de codage) et produisant une, très simple.

Je n'ai jamais trouvé une solution commerciale, mais je me devais de les gratuit sur en raison de budget, de sorte que la coupe d'un grand nombre, mais prendre le plus grand soin dans le choix de l'un pour s'assurer qu'il fait ce que vous voulez et a le soutien.

Je ne pense pas que l'endroit où vous venez de HTML/XML/XHTML, j'ai été la conversion de CSV formats, le format RTF.

Je ne suis pas sûr si je vous conseille de BRICOLAGE ou d'acheter.Probablement l'équilibre de BRICOLAGE, mais vos propres circonstances imposent.

Edit:Une chose allant de contenu au format RTF est plus facile que l'inverse.

BTW pas de critiquer MS fior la RTF versions, hey c'est à eux et les propriétaires afin qu'ils puissent faire ce qu'ils aiment.

Je viens de tomber sur ce WYSIWYG éditeur de texte riche (RTE) pour le web qui a également un code HTML pour convertisseur RTF, Mignon Éditeur .NET.Quelqu'un a une expérience avec ce composant?Mon expérience principale pour basé sur le web RTEs ont été CKEditor (fckEditor) et de TinyMCE, mais aussi loin que je peux dire CKEditor et TinyMCE n'ont pas de HTML au format RTF, les convertisseurs intégrés.

Depuis que je suis tenu de mettre en œuvre certaines de publipostage capacités avec de riches de mise en forme du texte sur une application Web, j'ai pensé qu'il serait sympa de partager mes expériences.

En gros, j'ai exploré deux alternatives:

  • à l'aide de Google Docs API de tirer parti de Google Docs capacités
  • à l'aide de XSLT, comme indiqué sur cet essai

Google Docs API travaille bien.Le problème est que, quand vous téléchargez un document HTML avec des sauts de page, comme ceci:

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

et de demander à Google de convertir doc en RTF, vous perdez tous les sauts, ce qui ne correspond pas à mes exigences.Toutefois, si les sauts de page ne sont pas un problème pour vous, vous pouvez cocher cette solution.

Le XSLT solution fonctionne...en quelque sorte.

Cela fonctionne si vous référence MSXML3 COM objet directement, sans passer par System.Xml des classes.Sinon, je ne pouvais pas le faire fonctionner.En outre, il semble à l'honneur de tous mais la mise en forme de base et balises, en faisant abstraction de la couleur du texte, la taille et la comme.Cependant, il honore les sauts de page.:-)

Voici une petite bibliothèque que j'ai écrit, à l'aide de tidy.net à force de HTML à XHTML conversion.Espérons que cela aide.

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: Je recommande d'utiliser le OpenXml le format et le HtmlToOpenXml package nuget, si possible.


Microsoft Word COM

Je n'ai pas vraiment beaucoup cherché dans cette rubrique comme mon cas est d'utiliser la fonctionnalité sur un serveur qui rend les composants COM pas un grand choix.


XHTML2RTF

Comme @IAmTimCorey mentionné vous pouvez utiliser cette codeproject de la bibliothèque.

Les inconvénients sont les suivants:

  • Limitée pris en charge le HTML et les CSS
  • Pas vraiment .NET
  • ...

Windows Forms Navigateur Web

Comme @Jerry mentionné vous pouvez utiliser Windows Forms WebBrowser de contrôle.

Les inconvénients sont les suivants:

  • Référence du Système.De Windows.Les formes
  • Utilise le copier-coller (problématique pour le multithreading)
  • Ne fonctionne que dans un thread STA

Pas de fonctionnalités prises en charge comprennent:

  • Les polices
  • Les couleurs
  • Les listes numérotées
  • Barré (del élément)
  • ...

DevExpress

Exemple de Code de "Paul V" de la devexpress centre de support. (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();
}

Ou vous pourriez utiliser les RichEditDocumentServer type comme indiqué dans cet exemple.

Inconnue ce qui est réellement pris en charge.

Les inconvénients sont les suivants:

  • Prix
  • Beaucoup de références pour une petite chose
  • Plus?

Pas de fonctionnalités prises en charge comprennent:

  • Striketrough (del élément)

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

Plus d'exemples et des options de configuration peuvent être trouvés ici et ici.

Pris en charge est la suivante:

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

Les inconvénients sont les suivants:

  • Je ne suis pas sûr de savoir comment active le développement est
  • Prix

L'utilisation de la base de connaissances:


BRICOLAGE

Si vous souhaitez uniquement un soutien limité de fonctionnalités que vous pouvez écrire votre propre convertisseur.Je ne recommanderais pas ceci si pris en charge à l'ensemble des fonctionnalités est trop grand.

J'ai un petit exemple de projet ici mais c'est seulement pour des fins d'enseignement dans son état actuel.


OpenXml

Si l' Format OpenXml est également ok pour votre cas d'utilisation, vous pouvez utiliser le HtmlToOpenXml package nuget.C'est gratuit et n'a en charge toutes les fonctionnalités que j'ai testé les autres solutions contre.

Le projet est basée sur la SDK Open Xml par microsoft et semble actif.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top