2010-01-11 9 views
5

Ich habe schon viele Beiträge auf der Website für RTF zu HTML und einige andere Beiträge über einige HTML zu RTF-Konverter gesehen, aber ich versuche wirklich, eine vollständige Aufschlüsselung von was zu bekommen gilt als das am weitesten verbreitete kommerzielle Produkt, Open-Source-Produkt oder wenn die Leute empfehlen, nach Hause zu wachsen. Entschuldigung, wenn Sie dies als doppelte Frage betrachten, aber ich versuche eine Produktmatrix zu erstellen, um zu sehen, was für unsere Anwendung am sinnvollsten ist. Ich denke auch, dass dies für andere hilfreich wäre.HTML to RTF Converter für .NET

Der Konverter würde in einer ASP.NET 2.0-Anwendung (wir werden in Kürze 3.5, aber immer noch mit WebForms aufrüsten) mit SQLServer 2005 (bald 2008) als DB verwendet werden.

Nach dem Lesen ein paar Beiträge scheint SautinSoft als eine kommerzielle Komponente beliebt zu sein. Gibt es andere kommerzielle Komponenten, die Sie für die Konvertierung von HTML nach RTF empfehlen? Der Preis spielt eine Rolle, aber selbst wenn es etwas teuer ist, listen Sie es bitte auf.

Für Open Source, habe ich gelesen, dass OpenOffice.org als ein Dienst ausgeführt werden kann, so dass es Dateien konvertieren kann. Dies scheint jedoch nur auf Java zu basieren. Ich stelle mir vor, ich brauche eine Art Interop, um das zu benutzen? Welche .NET-Open-Source-Komponenten gibt es, wenn überhaupt, für die Konvertierung von HTML nach RTF?

Für einheimisch, ist ein XSLT der Weg mit XHTML gehen? Wenn ja, welche Komponente empfehlen Sie für die Generierung von XHTML? Ansonsten, was andere hausgemachten Avenues empfehlen Sie.

Bitte beachten Sie auch, dass ich mich momentan nicht so sehr für RTF zu HTML interessiere. Wenn eine kommerzielle Komponente dies bietet und der Preis immer noch derselbe ist, gut, ansonsten bitte nicht erwähnen.

+0

Könnte ich mehr Hintergrundwissen über die technische Aufgabe bekommen? Warum machst du das eigentlich? Welches Programm wird das RTF-Endprodukt anzeigen? – Albert

+0

@Albert. Daten werden aus einem DB abgerufen, um einen RTF-Bericht zu generieren. Die gesamte RTF-Formatierung wird derzeit im Bericht (hartcodiert ... ourch!) Basierend auf einer Spezifikation durchgeführt, aber in einigen Fällen möchte der Client einige Abschnitte formatieren, sodass wir ihnen einen Rich-Text-Editor zur Verfügung stellen die Web-App und wenn sie es speichern, werde ich es in ein Stück formatierten RTF konvertieren, die aus der DB gezogen und in den Bericht eingefügt werden. – nickytonline

+0

Ähm ... Ich bin total verwirrt. Ich versuche hier den Datenfluss und die Konvertierung zu verstehen. Bisher habe ich folgendes: DB -> RTF -> RTF * -> DB Aber das macht keinen Sinn, da es implizieren würde, dass Sie einen RTF-Parser haben, der grep und dump in die DB kann. Es sei denn du meinst die DB hält RTF-Daten? – Albert

Antwort

0

Ich würde empfehlen, es selbst zu tun, da die Aufgabe nicht ist wirklich so komplex. Erstens, der einfachste Weg, ein Xml-Format in ein anderes Xml-Format zu konvertieren, ist ein Xslt. Das Konvertieren von Xml-Dokumenten in C# ist kinderleicht.

Hier ist ein guter MSDN Blogeintrag, um loszulegen. Mike erwähnt sogar, dass es einfacher war, dies mit der Hand zu tun, als mit einem Dritten zu verhandeln.

link

Eigentlich habe ich bereits beantwortet diese Frage here. Schätze das macht das zu einem Duplikat.

+0

@Ty - Ich habe keine Probleme mit der Anpassung, frage mich nur, was Sie für die Konvertierung in XHTML empfehlen würden, wenn der HTML-Code nicht perfekt ist. – nickytonline

+0

@nickyt Vermasselt HTML würde diesen Job zu einem echten Schmerz machen. Ich habe einige Apps gemacht, in denen das HTML/RTF kontrolliert wurde, aber wenn du fettgedruckte Tags, starke Tags und manchmal nicht geschlossene Tags siehst, musst du vielleicht einen zweistufigen Ansatz betrachten, bei dem du zuerst die Daten normalisierst dann konvertieren. Ich glaube nicht, dass Sie sich um XHTML sorgen müssen. –

+0

@Ty - Ich werde homegrown gehen. – nickytonline

0

Ich bin gerade auf diesen WYSIWYG-Rich-Text-Editor (RTE) für das Web gestoßen, das auch einen HTML-RTF-Konverter hat, Cute Editor for .NET. Hat jemand Erfahrung mit dieser Komponente? Meine Haupterfahrung für webbasierte RTEs war CKEditor (fckEditor) und TinyMCE, aber soweit ich sagen kann, haben CKEditor und TinyMCE kein HTML zu RTF-Konvertern eingebaut.

1

Für was es wert ist und in keiner bestimmten Reihenfolge.

Vor einer Weile wollte ich nach RTF exportieren und dann von RTF das betreffende RTF importieren, das von MS Word manipuliert wird.

Das erste Problem ist RTF ist kein offener Standard. Es ist ein interner MS-Standard und daher ändern sie es so, wie es ihnen gefällt, und sorgen sich im Allgemeinen nicht um die Kompatibilität. Derzeit sind die Versionen von RTF 1.3 bis 1.9 und sie sind alle unterschiedlich. Intern verwenden sie Twips für die Messung nur für ein gutes Maß.

Ich kaufte das O'Reilly-Taschenbuch über das Thema, das half und las eine Menge der MS-Dokumentation, die gut ist, aber es gibt eine Menge davon und viele für jede Version.

Aufgrund der Art und Weise, wie RTF codiert mit Regex zu manipulieren ist unglaublich harte Arbeit und braucht sorgfältige Handhabung und Konzentration zu testen und zu arbeiten. Ich benutze einen Mac-Editor, der in Regex integriert wurde, so dass ich jeden Abschnitt kontinuierlich testen und in den Code einbauen konnte.

Wegen der Anzahl der Versionen gibt es auch viele Inkompatibilitäten zwischen den Versionen, aber es gibt eine Menge Gemeinsamkeiten und am Ende war es einigermaßen schwer/leicht zu bekommen, wo ich wollte (nach etwa einwöchigem Lesen und Wochen) Kodierung) und produziert eine wirklich einfache Version.

Ich habe nie eine kommerzielle Lösung gefunden, aber ich musste wegen des Budgets eine kostenlose haben, so dass eine Menge geschnitten, aber sehr sorgfältig bei der Auswahl eines um sicherzustellen, dass es das tut was Sie wollen und Unterstützung hat.

Ich glaube nicht, wo Sie herkommen von HTML/XML/XHTML, ich konvertierte CSV-Formate, es ist die RTF.

Ich bin mir nicht sicher, ob ich DIY oder kaufen empfehlen würde. Wahrscheinlich im Gleichgewicht DIY, aber Ihre eigenen Umstände werden dies diktieren.

Edit: Eine Sache vom Inhalt zu RTF ist einfacher als umgekehrt.

BTW nicht kritisieren MS für die RTF-Versionen, hey es ist ihre und proprietär, so dass sie tun können, was sie wollen.

0

Da ich einige Mailmerge-Funktionen mit Rich-Text-Formatierung in einer Webanwendung implementieren muss, dachte ich, es wäre schön, meine Erfahrungen zu teilen.

Grundsätzlich erkundete ich zwei Alternativen:

  • mit Google Docs API Google Text & Tabellen-Funktionen
  • mit XSLT zu nutzen, wie auf this essay

Google Docs API gut funktioniert. 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 Seitenumbrüche jedoch kein Problem für Sie darstellen, können Sie diese Lösung überprüfen.

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

Es funktioniert, wenn Sie MSXML3 COM-Objekt direkt referenzieren und System.Xml-Klassen umgehen. Sonst könnte ich es nicht funktionieren lassen. Darüber hinaus scheint es alle außer grundlegenden Formatierungen und Tags zu respektieren, abgesehen von Textfarbe, Größe und dergleichen. Es ehrt jedoch Seitenumbrüche. :-)

Hier ist eine schnelle Bibliothek, die ich schrieb, mit Hilfe von sauber.net, um HTML zur XHTML-Konvertierung zu erzwingen. 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; 
       } 
      } 
     } 
    } 



}