Ответ 1
Я бы посмотрел этот инструмент на CodeProject RTFConverter. Этот парень дает отличную информацию о том, как работает программа вместе с деталями преобразования.
У нас есть хрустальный отчет, который нам нужно отправить как электронное письмо, но HTML, созданный из отчета Crystal, в значительной степени просто уродлив и вызывает проблемы с некоторыми почтовыми клиентами. Я хотел экспортировать его как богатый текст и преобразовать его в HTML, если это возможно.
Любые предложения?
Я бы посмотрел этот инструмент на CodeProject RTFConverter. Этот парень дает отличную информацию о том, как работает программа вместе с деталями преобразования.
Майк Столл опубликовал код для одного, который он написал в С# здесь:
http://blogs.msdn.com/jmstall/archive/2006/10/20/rtf_5F00_html.aspx
Существует также образец в галерее образцов кода MSDN под названием Преобразование между RTF и HTML, что позволяет вам конвертировать между HTML, RTF и XAML.
Если вы не против того, чтобы ваши руки были грязными, писать конвертер RTF в HTML не так сложно.
Написание конверта RTF- > HTML общего назначения было бы несколько сложным, потому что вам нужно было иметь дело с сотнями RTF-глаголов. Однако в вашем случае вы имеете дело только с теми глаголами, которые специально используются Crystal Reports. Бьюсь об заклад, стандартное RTF-кодирование, генерируемое Crystal, не сильно отличается от отчета к отчету.
Я написал RTF в HTML-конвертер в С++, но он касается только базового форматирования, такого как шрифты, выравнивание абзацев и т.д. Мой переводчик в основном выделяет любое специализированное форматирование, с которым он не готов справиться. Это заняло около 400 строк С++. Он в основном сканирует текст для тегов RTF и заменяет их эквивалентными тегами HTML. Теги RTF, которые не входят в мой список, просто удаляются. Функция regex действительно полезна при написании такого конвертера.
Я вернулся домой и попробовал код ниже, и он не работает. Для любого, кто задается вопросом, буфер обмена не просто волшебным образом конвертирует вещи, как я надеялся. Скорее, он позволяет приложению сортировать "выгружать" объект данных с различными форматами вставки, а затем вы вставляете (который в моей метафоре будет "загружать" ) вставляемая программа указывает на предпочтительный формат. Я лично закончил использование этого кода, который был рекомендован ранее, и он был чрезвычайно прост в использовании и очень эффективен. После того, как вы импортировали код (в VStudio, Project → Добавить существующие файлы), вы просто отправляете html в rtf следующим образом:
return HtmlToRtfConverter.ConvertHtmlToRtf(myRtfString);
или в противоположном направлении:
return RtfToHtmlConverter.ConvertHtmlToRtf(myHtmlString);
Большинство, если не все из вышеперечисленных ответов, предоставляют исчерпывающие, часто основанные на библиотеке решения проблемы. Я прочь от своего компьютера и, таким образом, не могу проверить эту идею, но один альтернативный, дешевый и неопределенный метод hack-y будет следующим.
private string HTMLFromRtf(string rtfString)
{
Clipboard.SetData(DataFormats.Rtf, rtfString);
return Clipboard.GetData(DataFormats.Html);
}
Опять же, не совсем уверен, что это сработает, но просто возиться с некоторыми html на моем iPhone, я подозреваю, что так будет. Документация здесь. Более подробное объяснение /docs RE: получение и настройка моделей данных в буфере обмена можно найти здесь.
(Да, я полностью осознаю, что я здесь несколько лет спустя, но я предполагаю, что этот вопрос - это тот, который некоторые люди все еще хотят получить).
Я не знаю о каких-либо библиотеках, чтобы сделать это (но я уверен, что есть много, что может), но если вы уже можете создать HTML из отчета Crystal, почему бы не использовать XSLT для очистки разметки?
Я думаю, вы можете загрузить его в объект документа Word, используя поддержку программирования .NET Office и инструменты Visual Studio для офиса.
И затем используйте экземпляр документа для повторного сохранения в виде HTML-документа.
Я не уверен, как, но я считаю, что это возможно полностью в .NET без какой-либо сторонней библиотеки.
Вы можете попробовать загрузить его в Google Документы и загрузить его как HTML.