2015-01-14 4 views
1

У меня есть редактор текстовых полей jquery Rich Textbox (http://jqueryte.com/), который позволяет конечному пользователю заполнить свой контент, чтобы сгенерировать отчет документа Word.Преобразование строк HTML в RTF в VB.NET

Процесс выглядит следующим образом:

Пользователь заполняет содержание -> Сохранение HTML содержания Richtext ящика в базу данных. -> Вытащить сохраненный HTML-контент из базы данных и преобразовать его в строку RTF, чтобы она открывалась в Microsoft Word.

Я попытался преобразовать HTML в RTF (функция, которая будет принимать в моей строке HTML и выдавать эквивалентную строку RTF), но было слишком сложно манипулировать всеми тегами HTML. Я много искал, но не смог найти решение (за исключением, по крайней мере, бесплатного) проблемы.

Любая помощь была бы принята с благодарностью.

Спасибо заранее.

+0

Я думаю, что синтаксис jquery rte и синтаксис слова rte не совпадают. –

+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, а также Слово, что RTF файлы Word работать чрезвычайно громоздки ... когда данные RTF Word подаются в RichTextBox, он отфильтровывает весь ненужный код.

Смежные вопросы