c # с использованием библиотеки

#c# #html #rtf

#c# #HTML #rtf

Вопрос:

Это довольно новичковый вопрос, поэтому, пожалуйста, потерпите меня.

Я создаю программное обеспечение, которое позволяет отправлять электронную почту.

Часть отправки работает безупречно.

Проблема в том, что тело электронного письма сохраняется в базе данных mssql в формате rtf. Когда я извлекаю rtf (сохраненный в виде строки), электронное письмо отправляется в виде обычного текста, причем rtf-код рассматривается как текст.

Мне нужно преобразовать текст rtf в html, и я пытаюсь использовать эту библиотеку: http://www.codeproject.com/KB/recipes/RtfConverter.aspx

Дело в том, что я понятия не имею, как это использовать. Когда я извлекаю библиотеку, там находятся сотни файлов. Мне удалось добавить в качестве ссылки rtf.interpreter, rtf.parser, rtf.converter.html через библиотеки DLL, найденные в папке biin / release. Но теперь я не знаю, каков следующий шаг.

Как я могу использовать это в своем проекте для преобразования rtf-строки в html?

Кто-нибудь может помочь мне в этом? Спасибо.

Ответ №1:

Вот минимальный образец:

   // ----------------------------------------------------------------------
  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
  

Ознакомьтесь также с включенными примерами RtfWinForms (WinForms) или RtfWindows (WPF).

Ответ №2:

Просмотрев статью, я полагаю, что класс, который вы ищете, является RtfHtmlConverter .

Самым простым способом было бы скопировать все .файлы dll из папки Release переносятся в папку внутри вашего проекта (вы также можете поместить сюда все другие зависимости). Затем щелкните правой кнопкой мыши References папку в вашем проекте (в VS Solution Explorer) и (когда откроется диалоговое окно) используйте «Обзор», чтобы найти подходящие сборки.

Затем вы можете использовать приведенный в статье пример для преобразования потока ввода RTF в строку HTML:

Взято из указанной вами статьи, все кредиты автору (хотя немного изменено, чтобы возвращать значение, вместо того, чтобы выводить его на консоль):

 public string ConvertRtf2Html(Stream rtfStream)
{
    // logger
    RtfInterpreterListenerFileLogger logger =
      new RtfInterpreterListenerFileLogger(@"c:tempRtfInterpreter.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();
}
  

Вы можете добавить перегрузку, которая принимает строку:

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

Вам также нужно будет добавить несколько using предложений в начало вашего исходного файла, чтобы включить необходимые пространства имен:

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