VB.NET中的HTML到RTF字符串转换

时间:2015-01-14 20:05:39

标签: html vb.net rtf rich-text-editor

我有一个jquery Rich Textbox编辑器(http://jqueryte.com/),允许最终用户填写其内容以生成word文档报告。

流程如下:

用户填写内容 - >将Richtext框内容的HTML保存到数据库中。 - >从数据库中提取存储的HTML内容并将其转换为RTF字符串,以便在Microsoft Word中打开。

我尝试将HTML转换为RTF(一个可以接收我的HTML字符串并提供等效RTF字符串的函数)但是操作所有HTML标记变得过于复杂。我搜索了很多但是找不到任何解决方案(至少不是免费的解决方案)。

非常感谢任何帮助。

先谢谢。

1 个答案:

答案 0 :(得分:0)

一种选择是使用MS Office Word Interop(尽管有些人不赞成)......

string html = "<html><head><style>p{margin:0}</style></head><body style=\"font-family:Arial;\">" + value.Replace("<p>&nbsp;</p>", "<p><br></p>") + "</body></html>";

byte[] htmlBytes = Encoding.UTF8.GetBytes(html);

string htmlPath = Path.GetTempFileName() + ".html";
string rtfPath = htmlPath.Replace(".html", ".rtf");

FileStream fs = new FileStream(htmlPath, FileMode.Create, FileAccess.Write);
fs.Write(htmlBytes, 0, htmlBytes.Length);
fs.Close();

Application word = new Application();
Document doc = word.Documents.Open(htmlPath);
doc.SaveAs(rtfPath, WdSaveFormat.wdFormatRTF);
doc.Close();
word.Quit();

fs = new FileStream(rtfPath, FileMode.Open, FileAccess.Read);
byte[] rtfBytes = new byte[fs.Length];
fs.Read(rtfBytes, 0, rtfBytes.Length);
fs.Close();

string rtf = Encoding.ASCII.GetString(rtfBytes);

Thread thread = new Thread(() =>
{
    RichTextBox rtb = new RichTextBox();

    rtb.Rtf = rtf;

    rtf = rtb.Rtf;
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
return rtf;

我使用RichTextBox和Word的原因是Word的RTF文件非常笨重......当Word的RTF数据被送入RichTextBox时,它会过滤掉所有不需要的代码。