2011-05-13 3 views
0

Ceci est une question tout à fait noob, alors s'il vous plaît ours avec moi.C# en utilisant la bibliothèque

Je crée un logiciel qui permet d'envoyer des emails.

La partie émettrice fonctionne parfaitement.

Le problème est que le corps de l'e-mail est enregistré dans une base de données mssql au format rtf. Lorsque je récupère le fichier rtf (stocké dans une chaîne), l'e-mail est envoyé en texte brut, le code RTF étant considéré comme du texte.

J'ai besoin de convertir le texte rtf html et je suis en train d'utiliser cette bibliothèque: http://www.codeproject.com/KB/recipes/RtfConverter.aspx

chose est que je n'ai aucune idée sur la façon de l'utiliser. Quand j'extrais la bibliothèque, il y a des centaines de fichiers. J'ai réussi à ajouter comme référence rtf.interpreter, rtf.parser, rtf.converter.html à travers les DLL trouvées dans le dossier biin/release. Mais maintenant je ne connais pas la prochaine étape.

Comment puis-je l'utiliser dans mon projet pour convertir la chaîne RTF en HTML?

Quelqu'un peut-il me guider à travers cela? Je vous remercie.

Répondre

2

Voici un échantillon minimal:

// ---------------------------------------------------------------------- 
    private static string ConvertRtfToHtml() 
    { 
    const string sampleRtfText = @"{\rtf1foobar}"; 

    IRtfDocument rtfDocument = RtfInterpreterTool.BuildDoc(sampleRtfText); 

    RtfHtmlConvertSettings settings = new RtfHtmlConvertSettings(); 
    settings.ConvertScope = RtfHtmlConvertScope.Content; 

    RtfHtmlConverter htmlConverter = new RtfHtmlConverter(rtfDocument, settings); 
    return htmlConverter.Convert(); 
    } // ConvertRtfToHtml 

Découvrez également les échantillons inclus RtfWinForms (Winforms) ou RtfWindows (WPF).

+0

Merci pour cela. M'a pointé dans la bonne direction. – Yash

2

En regardant l'article, je crois que la classe que vous recherchez est RtfHtmlConverter. La méthode la plus simple serait de copier tous les fichiers .dll du dossier Release dans un dossier de votre projet (vous pouvez également y ajouter toutes les dépendances). Ensuite, faites un clic droit sur le dossier References dans votre projet (dans VS Solution Explorer), et (lorsque la boîte de dialogue s'ouvre) utilisez "Parcourir" pour trouver les assemblages appropriés.

Ensuite, vous pouvez utiliser l'exemple fourni dans l'article pour convertir un flux d'entrée RTF à une chaîne HTML:

Extrait du article you specified, tous les crédits à l'auteur (bien que légèrement modifié pour renvoyer la valeur, au lieu de l'imprimer à la console):

public string ConvertRtf2Html(Stream rtfStream) 
{ 
    // logger 
    RtfInterpreterListenerFileLogger logger = 
     new RtfInterpreterListenerFileLogger(@"c:\temp\RtfInterpreter.log"); 

    // image converter 
    // convert all images to JPG 
    RtfVisualImageAdapter imageAdapter = 
     new RtfVisualImageAdapter(ImageFormat.Jpeg); 
    RtfImageConvertSettings imageConvertSettings = 
        new RtfImageConvertSettings(imageAdapter); 
    imageConvertSettings.ScaleImage = true; // scale images 
    RtfImageConverter imageConverter = 
      new RtfImageConverter(imageConvertSettings); 

    // interpreter 
    IRtfDocument rtfDocument = RtfInterpreterTool.Interpret(rtfStream, 
               logger, imageConverter); 

    // html converter 
    RtfHtmlConvertSettings htmlConvertSettings = 
      new RtfHtmlConvertSettings(imageAdapter); 
    htmlConvertSettings.StyleSheetLinks.Add("default.css"); 
    RtfHtmlConverter htmlConverter = new RtfHtmlConverter(rtfDocument, 
               htmlConvertSettings); 
    return htmlConverter.Convert(); 
} 

Vous pouvez ajouter une surcharge qui accepte une chaîne:

public string ConvertRtfToHtml(string rtfString) 
{ 
    string sourceRtf = "some rtf"; 
    byte[] data = ASCIIEncoding.Default.GetBytes(sourceRtf); 
    using (MemoryStream ms = new MemoryStream(data)) 
    { 
     // call the method above 
     return ConvertRtfToHtml(ms); 
    } 
} 

Vous aurez aussi besoin d'ajouter s lusieurs using clauses au début de votre fichier source, pour inclure les espaces de noms nécessaires:

using Itenso.Rtf.Interpreter; 
using Itenso.Rtf.Converter.Html; 
using Itenso.Rtf.Converter.Image; 
Questions connexes