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