C#.net преобразование HTML в RTF
есть еще один пост на HTML в RTF конвертер для .NET, но есть ли конвертеры с открытым исходным кодом или учебные пособия? Я не хочу использовать Sautinsoft. Я думаю, что есть решение в ExpertsExchange, но я должен заплатить за это. Большинство результатов поиска в google указывают на конвертер RTF в html, но не конвертер html в RTF.
3 ответов
статья ExpertsExchange в лучшем случае плохая. В основном ОП сдался, потому что они не могли дать хороший ответ. Они перечисляют ссылку на статью CodeProject (http://www.codeproject.com/KB/HTML/XHTML2RTF.aspx ), который показывает вам, как конвертировать HTML в RTF, но это не решение .NET. Вместо этого, это было бы что-то, что должно быть очень адаптировано.
по моему опыту, там нет хорошего конвертера с открытым исходным кодом. Куски все кажется, что есть, но он ждет, когда кто-то сделает легкую работу по объединению всего этого. Тем не менее, немедленный ответ на ваш вопрос заключается в том, что конвертера уже нет.
создайте WebBrowser. Загрузить HTML-контента. Выберите все и скопируйте из него. Вставьте в richtextbox. Тогда у вас есть RTF
string html="...."; // html content
RichTextBox rtbTemp= new RichTextBox();
WebBrowser wb = new WebBrowser();
wb.Navigate("about:blank");
wb.Document.Write(html);
wb.Document.ExecCommand("SelectAll", false, null);
wb.Document.ExecCommand("Copy", false, null);
rtbTemp.SelectAll();
rtbTemp.Paste();
теперь rtbTemp.RTF имеет RTF, преобразованный из HTML.
TL; DR: Я рекомендую использовать и HtmlToOpenXml
пакет nuget, если это возможно.
Microsoft Word COM
Я не очень много искал в этой теме, так как мой вариант использования-использовать функциональность на сервере, что делает com-компоненты не отличным выбором.
XHTML2RTF
как упоминал @IAmTimCorey, вы можете использовать это библиотека codeproject.
недостатки:
- ограниченный поддерживаемый HTML и CSS
- не совсем .NET
- ...
Веб-Браузер Windows Forms
как упоминал @Jerry, вы можете использовать Windows Forms WebBrowser
управление.
недостатки:
- ссылка на систему.Окна.Формы
- использует copy & paste (проблематично для многопоточность)
- работает только в потоке STA
не поддерживаемые функции включают в себя:
- шрифты
- цвета
- нумерованные списки
- зачеркивание (
del
элемент) - ...
DevExpress
образец кода "Paul V" из Центр поддержки devexpress. (03.02.2015)
public String ConvertRTFToHTML(String RTF)
{
MemoryStream ms = new MemoryStream();
StreamWriter writer = new StreamWriter(ms);
writer.Write(RTF);
writer.Flush();
ms.Position = 0;
String output = "";
HtmlEditorExtension.Import(HtmlEditorImportFormat.Rtf, ms, (s, enumerable) => output = s);
return output;
}
public String ConvertHTMLToRTF(String Html)
{
MemoryStream ms = new MemoryStream();
var editor = new ASPxHtmlEditor { Html = html };
editor.Export(HtmlEditorExportFormat.Rtf, ms);
ms.Position = 0;
StreamReader reader = new StreamReader(ms);
return reader.ReadToEnd();
}
или вы мог бы использовать RichEditDocumentServer
тип, как показано в .
- A лицензия на devexpress может побережье от около 1500.- USD до 2200.- доллар США.
неизвестно, что на самом деле поддерживается.
недостатки:
- цена
- довольно много ссылок для одной маленькой вещи
- больше?
не поддерживаемые функции включить:
- Striketrough (
del
элемент)
Sautinsoft
public string ConvertHTMLToRTF(string html)
{
SautinSoft.HtmlToRtf h = new SautinSoft.HtmlToRtf();
return h.ConvertString(htmlString);
}
public string ConvertRTFToHTML(string rtf)
{
SautinSoft.RtfToHtml r = new SautinSoft.RtfToHtml();
byte[] bytes = Encoding.ASCII.GetBytes(rtf);
r.OpenDocx(bytes );
return r.ToHtml();
}
дополнительные примеры и параметры конфигурации можно найти здесь и здесь.
- A лицензия на данный компонент может побережье от 400.- USD до 2000.- доллар США.
- HTML-код 3.2
- HTML 4.01
- HTML 5
- в CSS
- XHTML
недостатки:
- я не уверен, насколько активна разработка
- цена
база знаний об использовании:
- преобразование нумерованных списков с Трикс угловые редактор уничтожает собирались, придумают тоже
DIY
если вы только хотел поддержать ограниченную функциональность вы могли написать свой собственный конвертер. Я бы не рекомендовал это, если поддерживаемый набор функций слишком велик. (Sautinsoft утверждает, что написал более 20'000 строк кода).
у меня маленький пример проекта здесь но только для образовательных целей в его нынешнем состоянии.
функция OpenXML
если формат OpenXml также в порядке для вашего случая использования вы можете использовать the пакет htmltoopenxml nuget. Его бесплатный и поддерживал все функции, с которыми я тестировал другие решения.
проект на основе Open Xml SDK от microsoft и кажется активным.
public static byte[] ConvertHtmlToOpenXml(string html)
{
using (var generatedDocument = new MemoryStream())
{
using (var package = WordprocessingDocument.Create(generatedDocument, WordprocessingDocumentType.Document))
{
var mainPart = package.MainDocumentPart;
if (mainPart == null)
{
mainPart = package.AddMainDocumentPart();
new Document(new Body()).Save(mainPart);
}
var converter = new HtmlConverter(mainPart);
converter.ParseHtml(html);
mainPart.Document.Save();
}
return generatedDocument.ToArray();
}
}