Frage

Ich habe schon viele Beiträge auf der Website für RTF zu HTML und einigen anderen Beiträgen über einige HTML to RTF-Konverter sprechen gesehen, aber ich versuche wirklich eine vollständige Aufschlüsselung der zu bekommen, was die meisten als weithin kommerziell verwendet Produkt, Open-Source-Produkt oder wenn die Leute nach Hause gehen grown empfehlen. Entschuldigt, wenn man bedenkt, das eine doppelte Frage, aber ich versuche, eine Produktmatrix zu erstellen, um zu sehen, was die praktikabelste ist für unsere Anwendung. Ich denke auch, diese für andere hilfreich sein würde.

Der Wandler würde in einer ASP.NET 2.0-Anwendung (wir ein Upgrade auf 3.5 kurz, aber immer noch mit WebForms kleben) verwendet werden, unter Verwendung von SQL Server 2005 (bald 2008) als die DB.

Von ein paar Beiträge zu lesen, SautinSoft erscheint als eine kommerzielle Komponente beliebt. Gibt es andere kommerzielle Komponenten, die Sie für die Umwandlung von HTML to RTF empfehlen würden? Preis spielt eine Rolle, aber auch wenn es ein wenig auf der teuren Seite ist, bitte geben Sie es.

Für Open Source, las ich, dass OpenOffice.org kann als Dienst so ausgeführt werden, dass es konvertieren Dateien. Dies scheint jedoch zu sein, nur Java basiert. Ich stelle mir vor, ich würde eine Art von Interop brauchen diese zu benutzen? Was .NET Open-Source-Komponenten, falls vorhanden, ist da draußen für HTML to RTF konvertieren?

Für home grown, ist ein XSLT die Art und Weise mit XHTML zu gehen? Wenn ja, welche Komponente empfehlen Sie XHTML zu erzeugen? Ansonsten, was andere home grown avenuses empfehlen Sie.

Beachten Sie auch, dass ich noch nicht so viel zu HTML zu RTF kümmern. Wenn eine kommerzielle Komponente bietet dieses und der Preis immer noch die gleiche ist, in Ordnung, sonst bitte nicht erwähnen.

War es hilfreich?

Lösung

Ich würde empfehlen, es selbst zu tun als die Aufgabe nicht wirklich so komplex. Zum einen ist der einfachste Weg zu konvertieren ein XML-Format in ein anderes XML-Format mit einem Xslt. Konvertieren von XML-Dokumenten in C # ist super einfach.

Hier ist eine gute Msdn Blog-Post für den Einstieg. Mike sogar erwähnt, dass es leichter war, diese von Hand zu tun, dass mit einem Dritten zu behandeln.

Link

Eigentlich habe ich bereits beantwortet diese Frage hier . Ich schätze, das macht dies ein Duplikat.

Andere Tipps

Für das, was ihren Wert und in keiner bestimmten Reihenfolge.

Vor einiger Zeit ich auf den Export in RTF wollte und dann Import von RTF die RTF in Frage MS Word manipuliert zu werden.

Das erste Problem ist RTF kein offener Standard ist. Es ist ein interner MS Standard und deshalb soll sie ändern sie wie und wann sie wie und im Allgemeinen nicht Sorgen über die Kompatibilität. Derzeit werden die Versionen von RTF sind 1,3 bis 1,9, und sie sind alle verschieden. Intern verwenden sie twips für die Messung nur für eine gute Maßnahme.

Ich kaufte das O'Reilly Tasche Buch zu diesem Thema, die geholfen und viel von der MS-Dokumentation lesen, was gut ist, aber es gibt eine Menge davon und jede für jede Version.

Aufgrund der Art und Weise RTF wird mit regex codiert zu manipulieren ist unglaublich harte Arbeit und erfordert eine sorgfältige Handhabung und Konzentration zu testen und an der Arbeit. Ich benutze einen Mac-Editor, der in regex gebaut hatte, so dass ich ständig jeden Abschnitt testen konnte und es in den Code zu bauen.

Aufgrund der Anzahl von Versionen gibt es auch eine Menge Inkompatibilität zwischen den Versionen, aber es gibt viele Gemeinsamkeiten, und am Ende war es ziemlich hart / leicht zu bekommen, wo ich (nach ca. einer Woche wollte zu lesen und eine Woche Codierung ) und eine wirklich einfache Version zu erzeugen.

Ich habe nie eine kommerzielle Lösung, aber ich hatte einen kostenloses zu haben, weil der Haushalt so dass Schnitt viel, aber mit großer Sorgfalt bei der Auswahl einer sicherzustellen, dass es das tut, was Sie wollen, und hat die Unterstützung.

Ich glaube nicht, wo Sie kommen aus HTML / XML / XHTML, ich war die Umwandlung CSV-Format, es ist die RTF.

Ich bin nicht sicher, ob ich zu DIY raten würde oder kaufen. Wahrscheinlich auf Balance DIY aber Ihre eigenen Umstände, dass diktieren.

Edit:. Eine Sache von Inhalt in der RTF-gehen ist einfacher als umgekehrt

BTW nicht kritisieren MS fior die RTF-Versionen, hey, es ist ihr und proprietäre, so dass sie tun können, was sie wollen.

Ich kam in diesem WYSIWYG Rich Text Editor (RTE) für das Web, das auch eine HTML to RTF Converter hat, Nette Editor für .NET . Hat jemand Erfahrung mit dieser Komponente? Meine Haupt Erfahrung für Web-basierte RTEs haben CKEditor gewesen (fckeditor) und TinyMCE aber soweit ich CKEditor und TinyMCE haben keine HTML to RTF-Konverter eingebaut sagen kann.

Da ich benötigt habe einige mailmerge Fähigkeiten mit Rich-Text-Formatierung auf einer Web-Anwendung zu implementieren, dachte ich, es wäre schön, meine Erfahrungen zu teilen.

Im Grunde Ich erforschte zwei Alternativen:

  • Google Text & Tabellen-API Anwendungen zu Google Text & Tabellen Fähigkeiten
  • mit XSLT, wie auf dieses Essay

Google Text & Tabellen-API funktioniert gut. Das Problem ist, wenn Sie ein HTML-Dokument mit Seitenumbrüche hochladen, wie folgt aus:

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

und fragen Sie Google das Dokument in RTF zu konvertieren, verlieren Sie alle Pausen, die nicht meine Anforderungen passt. Wenn jedoch Seitenumbrüche für Sie kein Thema sind, können Sie diese Lösung angeboten werden.

Die XSLT-Lösung funktioniert ... irgendwie.

Es funktioniert, wenn Sie MSXML3 COM-Objekt direkt verweisen, unter Umgehung System.Xml-Klassen. Sonst könnte ich es nicht funktioniert. Darüber hinaus scheint es, wie alle, aber grundlegende Formatierungen und Tags, abgesehen von Textfarbe, Größe und die zu ehren. Doch es ehrt Seitenumbrüche. :-)

Hier ist eine schnelle Bibliothek, die ich geschrieben habe, mit tidy.net zu Kraft HTML zu XHTML Konvertierung. Ich hoffe es hilft.

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:. Ich empfehle, mit dem OpenXml Format und das HtmlToOpenXml nuget Paket, wenn möglich


Microsoft Word COM

Ich habe wirklich nicht gesucht viel in dieses Thema als mein Anwendungsfall ist die Funktionalität auf einem Server zu verwenden, die COM-Komponenten nicht eine große Auswahl macht.


XHTML2RTF

Wie @IAmTimCorey erwähnt diese Codeproject-Bibliothek verwenden können.

Nachteile sind:

  • Beschränkte unterstützt HTML und CSS
  • Nicht wirklich .NET
  • ...

Windows Forms Web-Browser

Wie @Jerry erwähnt die Windows Forms WebBrowser Steuerung verwenden können.

Nachteile sind:

  • Verweis auf System.Windows.Forms
  • Uses Copy & Paste (problematisch für Multithreading)
  • Funktioniert nur in einem STA-Thread

Nicht unterstützt Funktionen gehören:

  • Schriftarten
  • Farben
  • Nummerierte Listen
  • Durchgestrichen (del Element)
  • ...

DevExpress

Codebeispiel von "Paul V" aus dem DevExpress Support Center . (2015.03.02)

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

Oder Sie könnten den RichEditDocumentServer Typen verwenden, wie in dieses Beispiel .

Unbekannt, was tatsächlich unterstützt wird.

Nachteile sind:

  • Preis
  • Eine ganze Menge von Artikeln für eine kleine Sache
  • Mehr?

Nicht unterstützt Funktionen gehören:

  • Striketrough (del Element)

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

Weitere Beispiele und Konfigurationsoptionen können hier und hier .

Unterstützt wird die folgende :

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

Nachteile sind:

  • Ich bin nicht sicher, wie aktiv die Entwicklung
  • Preis

Verwendung Knowledgebase:

  • Konvertieren von nummerierten Listen aus dem trix Winkel Editor zerstört Gedankenstrich vorgesehenen

DIY

Wenn Sie wollte nur eine begrenzte Funktionalität unterstützen Sie Ihren eigenen Konverter schreiben konnte. Ich würde nicht empfehlen, wenn das unterstützte Feature-Set zu groß ist.

Ich habe eine kleine Beispielprojekt hier sondern ist nur für Bildungszwecke in seinem aktuellen Zustand.


OpenXml

Wenn die OpenXML-Format ist für Ihren Anwendungsfall auch ok Sie cein verwenden, um das HtmlToOpenXml nuget Paket . Sein freies und hat Unterstützung alle Funktionen, die ich die anderen Lösungen gegen getestet haben.

Das Projekt auf der Open XML SDK von Microsoft und scheint aktiv.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top