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 тип, как показано в .

неизвестно, что на самом деле поддерживается.

недостатки:

  • цена
  • довольно много ссылок для одной маленькой вещи
  • больше?

не поддерживаемые функции включить:

  • 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();
}

дополнительные примеры и параметры конфигурации можно найти здесь и здесь.

поддерживается следующее:

  • 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();
    }
}