c#使用库

时间:2011-05-13 16:12:36

标签: c# html rtf

这是一个非常小的问题,所以请耐心等待。

我正在创建一个允许发送电子邮件的软件。

发送部分完美无瑕。

问题是电子邮件的正文以rtf格式保存在mssql数据库中。当我检索rtf(存储在字符串中)时,电子邮件以纯文本形式发送,rtf代码被视为文本。

我需要将rtf文本转换为html,我正在尝试使用此库:http://www.codeproject.com/KB/recipes/RtfConverter.aspx

事情是我对如何使用它一无所知。当我提取库时,有数百个文件。我设法通过biin / release文件夹中的dll添加参考rtf.interpreter,rtf.parser,rtf.converter.html。但现在我不知道下一步。

如何在我的项目中使用它将rtf字符串转换为html?

任何人都可以指导我完成这个吗?谢谢。

2 个答案:

答案 0 :(得分:2)

通过查看文章,我相信您要找的课程是RtfHtmlConverter

最简单的方法是将所有.dll文件从Release文件夹复制到项目内的文件夹中(您也可以将所有其他依赖项放在此处)。然后,右键单击项目中的References文件夹(在VS Solution Explorer中),以及(当对话框打开时)使用“浏览”查找适当的程序集。

然后,您可以使用本文中提供的示例将RTF输入流转换为HTML字符串:

取自article you specified,作者的所有学分(虽然略有修改以返回值,而不是将其打印到控制台):

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;

答案 1 :(得分:2)

这是一个最小的样本:

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