c # используя библиотеку - PullRequest
0 голосов
/ 13 мая 2011

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

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

Отправляющая часть работает без нареканий.

Проблема в том, что тело письма сохраняется в базе данных 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?

Может ли кто-нибудь направить меня через это? Спасибо.

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

Здесь минимальный образец:

  // ----------------------------------------------------------------------
  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 голосов
/ 13 мая 2011

Судя по статье, я считаю, что класс, который вы ищете: RtfHtmlConverter.

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

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

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

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

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

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;
...