| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > RTF2HML |
| Автор: Snowy 29.3.2006, 12:18 |
| Нужно сконвертировать RTF в HTML. Стандарт минимальный RTF 1.0 - только фонт (размер, цвет, стиль и т.д.), выравнивание и пункты. В идеале нужно получить функцию RtfToHtml(rtf: string): string; Вот, сижу мучаюсь. Результат пока на 2 с плюсом. Какой-то есть, но неудовлетворительный. Нашел на тори 2 решения. Одно хорошее, но нерабочее. Второе рабочее, но десятки килобайт кода. Почесал тыковку, решил, что проще будет делать анализ позиционный, как в теме "RTF: Форматирован ли текст". Но что-то плохо работает. Может кто видел готовое решение? В принципе, если помучаться, то рожу решение до конца дня. Но, если кто-то может помочь - буду рад. P.S. Код из DRKB вообще непонятно что делает в FAQ. Я понимаю, что он что-то конвертирует. Но никакого отношения к RTF и HTML он не имеет, хотя гордо лежит там именно под этим заголовком. |
| Автор: Демо 29.3.2006, 12:52 |
| В PM ссылку отправил. |
| Автор: Guedda 29.3.2006, 12:55 |
| А может ссылку сюда кинешь? А то многим интересен этот вопрос. Я не исключение. |
| Автор: MIX55 29.3.2006, 13:00 |
| я вот нашел модуль RTF2HTML правда для Visual Basic'a если что могу ссылку кинуть |
| Автор: Демо 29.3.2006, 13:05 | ||
Политика сайта не позволяет. Пусть Snowy это сделает-) |
| Автор: Matematik 29.3.2006, 13:08 |
| Зато правила не запрещают, а значит можно. Добавлено @ 13:09 Мне тоже очень интересен данный вопрос. |
| Автор: Демо 29.3.2006, 13:19 |
| Ну у меня не один, и не 2 постинга уже порезали. Какой смысл давать такие ссылки тогда? |
| Автор: Snowy 29.3.2006, 13:29 |
| Демо, посмотрел. Первый вариант уж слишком ограничен. Пропускает максимум возможного. Второй вариант ('rtf2html © 2001 by Johannes Tronkle') на 4 с плюсом. Немного плавают шрифты, не всегда цвет текста попадает. Но в целом хорошо. Если бы не кол-во кода. Думаю, у меня получится гораздо меньше. Да и с размерами шрифта поточнее будет. Мне осталось исправить закрытие только что открытых тегов и сделать тэги параграфа. |
| Автор: Демо 29.3.2006, 13:37 |
| Snowy, ;) |
| Автор: Guedda 29.3.2006, 13:39 |
| Может хотя бы коды выложите, а ссылку не надо? Ну очень интересно, как это реализовывают люди... |
| Автор: Демо 29.3.2006, 13:40 | ||
|
| Автор: Alex 29.3.2006, 13:42 |
| Один из вариантов есть в FAQ http://vingrad.ru/DELPHI-DLP-001093 PS: Код не проверял |
| Автор: Alexeis 29.3.2006, 13:47 |
| http://megalib.com/books/199/RTF2HTML.htm |
| Автор: Snowy 29.3.2006, 13:59 |
| Угу. С него я и начал. Если конечно доработать напильником... Но проще свое доделать. Это решение виснет, когда не находит название фонта. А, если не виснит, то размеры совершенно дикие. |
| Автор: RA 29.3.2006, 15:18 |
| Могу предложыть РичВью там это встроенно + ЕдокЭнджайн к рич вьюву там можно экспортировать хоть в pdf |
| Автор: Guedda 29.3.2006, 15:19 |
| Это компонент или программа, или класс? Подробнне, пожалуйста... |
| Автор: Snowy 29.3.2006, 15:21 |
| Пробовали. Впечатляет. Но во-первых платный, во вторых из-за такой кучи возможностей, программа от него тяжелеет хорошо. Добавлено @ 15:22 Guedda, на торри его найдешь. |
| Автор: Guedda 29.3.2006, 15:22 |
| Спасибо. |
| Автор: RA 29.3.2006, 15:31 |
| Snowy, ну первое поправимо в клубе, а второе увы никак. |
| Автор: Snowy 29.3.2006, 15:36 |
| Нет. Мне всего лишь нужно конвертнуть. Таскать такой размер из-за этого мне совсем не к чему. Вот пыхтю, пишу конвертор. Как напишу - выложу. |
| Автор: Alex 30.3.2006, 23:07 | ||
Все понимаю, в твоих руках изменить его там |
| Автор: Snowy 31.3.2006, 09:35 | ||
У меня пока получилось такое решение:
Времени нормально протестировать не было. Если можете, потестите, укажите недостатки. |
| Автор: Yanis 31.3.2006, 09:58 |
| Посмотри прикреплённый архив с модулем rtf2html.pas. Даёт прирост 6656 b. Ещё наткнулся на http://groups.google.com/group/borland.public.delphi.vcl.components.using/browse_frm/thread/74dbb774f0e0652f/185576c53820d122%23185576c53820d122. Там же линк на этот модуль. |
| Автор: Snowy 31.3.2006, 11:09 |
| Yanis, этот модуль тут уже 2 раза упоминался. Он довольно тупой и при малейшем шаге влево-вправо вешает программу. Повторюсь - его я пробовал использовать самым первым. Не годится. Лучше попробуй потестить мой вариант. Он уже готов и работает. Нужно только оттестить разные варианты оформления текста и параграфов. С текстом он справляется отлично. Думаю глюки могут быть с форматированием параграфов. |
| Автор: Yanis 31.3.2006, 11:13 | ||
| Сорри Попробую... Добавлено @ 11:24 Может неправильно что то делаю, но у меня вообще код кажется не работает. Далаю так:
После этого в сохранённом файле просто текст, без единого тега |
| Автор: Snowy 31.3.2006, 11:41 | ||
+ я нашел одну маленькую бажечку: После создания RichEdit, нужно сделать re.WordWrap := false; Уже поправил в исходно посте. |
| Автор: Snowy 31.3.2006, 13:14 |
| Пофиксил еще одну багу - пропускались пустые строки. Теперь нужна помощь: как задетектить URL? Нужно TXT гиперссылки превращать в HTML гиперссылки. как в тексте определить, что есть гиперссылка, а что нет? |
| Автор: _hunter 31.3.2006, 13:19 |
| так, как и все делают -- есть в тексте http:// ( https://, ftp:// ) -- ссылка, иначе -- нет. |
| Автор: Snowy 31.3.2006, 13:43 |
| еще mailto. Видимо так и придется. А какие еще варианты бывают? |
| Автор: _hunter 31.3.2006, 13:50 |
| еще бывают варианты таскания с собой архива какой-нить dns или определение ссылки на лету ( запрос к dns если два латинских слова разделены точкой, но не разделены пробелом ) но эти способы довольно-таки ресурсоемки и для просторов xUSSR не особо годятся... |
| Автор: Yanis 31.3.2006, 13:51 |
| Наверное по другому никак. Например в ICQ набираешь http://, то она определяет, что это уже есть ссылка. |
| Автор: Snowy 31.3.2006, 14:02 |
| Еще бывают ссылки вида user@domain.ru Их тоже нужно детектить. Может у кого есть код? |
| Автор: Romikgy 31.3.2006, 14:32 |
| мож по окончаниям типа .ru, .com, .org, .gov, .ua их же будет значительно меньше |
| Автор: Snowy 31.3.2006, 14:35 |
| Да их сотни. Когда-то я видел код для поиска мылов в строке... К тому же окончание еще найти нужно. Оно может быть и пробелом и #13 и > и " и еще хрен знает чем. |
| Автор: Snowy 31.3.2006, 14:55 |
| Наверняка должны быть системная функция детекта урлов. RichEdit ведь как-то детектит их на системном уровне. Поковырял SDK, нашел только функцию UrlIs. Но это уже лучше, чем ничего... |
| Автор: Alexeis 31.3.2006, 15:20 |
| Snowy, ссылки типа user@domain.ru легко находятся при помощи регулярных выражений |