Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RTF2HML, нужна функция конвертации 
:(
    Опции темы
RA
Дата 29.3.2006, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115



Могу предложыть РичВью там это встроенно + ЕдокЭнджайн к рич вьюву там можно экспортировать хоть в pdf
PM   Вверх
Guedda
Дата 29.3.2006, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Это компонент или программа, или класс?
Подробнне, пожалуйста...


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Snowy
Дата 29.3.2006, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Пробовали. Впечатляет. Но во-первых платный, во вторых из-за такой кучи возможностей, программа от него тяжелеет хорошо.
Добавлено @ 15:22
Guedda, на торри его найдешь.
PM MAIL   Вверх
Guedda
Дата 29.3.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Спасибо.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
RA
Дата 29.3.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115



Snowy, ну первое поправимо в клубе, а второе увы никак.

Это сообщение отредактировал(а) RAdmin - 29.3.2006, 18:10
PM   Вверх
Snowy
Дата 29.3.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Нет. Мне всего лишь нужно конвертнуть.
Таскать такой размер из-за этого мне совсем не к чему.
Вот пыхтю, пишу конвертор.
Как напишу - выложу.
PM MAIL   Вверх
Alex
Дата 30.3.2006, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(Snowy @ 29.3.2006, 14:45)
Alex,
Цитата(Snowy @  29.3.2006,  12:18 Найти цитируемый пост)
Код из DRKB вообще непонятно что делает в FAQ.Я понимаю, что он что-то конвертирует. Но никакого отношения к RTF и HTML он не имеет, хотя гордо лежит там именно под этим заголовком.

Все понимаю, в твоих руках изменить его там smile

Это сообщение отредактировал(а) Alex - 30.3.2006, 23:07


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Snowy
Дата 31.3.2006, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



У меня пока получилось такое решение:
Код
function TextToHtml(s: string): string;
const
  sim: array[1..6] of string = ('&lt;', '&gt;','&quot;','&amp;', '<br>', '');
  sims = '<>"&'#13#10;
var i: integer;
begin
  result := '';
  for i := 1 to length(s) do
    if pos(s[i], sims) > 0 then result := result + sim[pos(s[i], sims)]
  else result := result + s[i];
end;

function RtfToHtml(s: string): string;
var
  re: TRichEdit;
  ss: TStringStream;
  f:  string;
  i, sz, cl: integer;
  st: TFontStyles;
  al: TAlignment;
  n:  TNumberingStyle;
  sp: boolean;
begin
  result := '';
  re := TRichEdit.Create(nil); re.WordWrap := false;
  re.Height := 0; re.Parent := Application.MainForm;
  ss := TStringStream.Create(s);
  re.Lines.LoadFromStream(ss);
  ss.Free; s := re.Text;
  f := ''; sz := 0; cl := 0; st := []; sp := false;
  al := taLeftJustify; n := nsNone;
  for i := 1 to Length(s) do
  begin
    re.SelStart := i;
    if (re.CaretPos.X=0) and (re.Lines[re.CaretPos.Y]='') then
      if s[i]=#13 then result:=result+'<br>';
    if re.CaretPos.X = 1 then begin // Paragraph
      if n = nsBullet then result := result+'</li>';
      if (re.Paragraph.Numbering = nsBullet) and (n = nsNone) then
      begin result := result + '<ul>'; n := nsBullet; end;
      if (re.Paragraph.Numbering <> nsBullet) and (n = nsBullet) then
      begin result := result + '</ul>'; n := nsNone; end;
      if n = nsBullet then result := result+'<li>';
      if re.Paragraph.Alignment <> al then begin
        if al <> taLeftJustify then result := result + '</div>';
        al := re.Paragraph.Alignment;
        if al = taRightJustify then result := result + '<div align=right>';
        if al = taCenter then result := result + '<div align=center>';
      end else if n = nsNone then result := result + '<br>';
    end;
    with re.SelAttributes do // Font
      if (f <> Name) or (sz <> Size) or (cl <> Color) or (st <> Style) then
      begin
        if sp then begin result := result + '</span>'; sp := false; end;
        if s[i] > #31 then begin
          f := Name; sz := Size; cl := Color; st := Style;
          result := result + '<span style="{font-family:' + f + ';font-size:' +
          IntToStr(sz) + 'pt;';
          if cl <> 0 then result := result + 'color:#' +
            Format('%.2x%.2x%.2x', [GetRValue(cl), GetGValue(cl), GetBValue(cl)])+
            ';';
          if fsBold in st then result := result + 'font-weight:bold;';
          if fsItalic in st then result := result + 'font-style:italic;';
          if fsUnderline in st then result := result + 'text-decoration:underline;';
          if fsStrikeOut in st then result := result + 'text-decoration:line-through;';
          result := result + '}">'; sp := true;
        end;
      end;
    if s[i] > #31 then result := result + TextToHTML(s[i]);
  end;
  if sp then result := result + '</span>';
  if al <> taLeftJustify then result := result + '</div>';
  if n = nsBullet then result := result + '</ul>';
  re.Free;
end;

Времени нормально протестировать не было.
Если можете, потестите, укажите недостатки.
PM MAIL   Вверх
Yanis
  Дата 31.3.2006, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Посмотри прикреплённый архив с модулем rtf2html.pas. Даёт прирост 6656 b. Ещё наткнулся на обсуждение. Там же линк на этот модуль.

Это сообщение отредактировал(а) Yanis - 31.3.2006, 09:59

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  rtf2html.zip 8,04 Kb


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Snowy
Дата 31.3.2006, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Yanis, этот модуль тут уже 2 раза упоминался.
Он довольно тупой и при малейшем шаге влево-вправо вешает программу.
Повторюсь - его я пробовал использовать самым первым. Не годится.
Лучше попробуй потестить мой вариант.
Он уже готов и работает.
Нужно только оттестить разные варианты оформления текста и параграфов.
С текстом он справляется отлично. Думаю глюки могут быть с форматированием параграфов.
PM MAIL   Вверх
Yanis
Дата 31.3.2006, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Snowy @ 31.3.2006, 11:09 Найти цитируемый пост)
Yanis, этот модуль тут уже 2 раза упоминался.

Сорри smile

Цитата(Snowy @ 31.3.2006, 11:09 Найти цитируемый пост)
Лучше попробуй потестить мой вариант.

Попробую...
Добавлено @ 11:24
Может неправильно что то делаю, но у меня вообще код кажется не работает. Далаю так:
Код

var
  sl: TStringList;
begin
  if OpenDialog1.Execute then
    RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);

  sl := TStringList.Create;
  sl.Text := TextToHtml(RichEdit1.Lines.Text);
  sl.SaveToFile('C:\test123.html');
  sl.Free;

После этого в сохранённом файле просто текст, без единого тега smile


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Snowy
Дата 31.3.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код
procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  sl.LoadFromFile('C:\1.rtf');
  sl.Text := RtfToHtml(sl.Text);
  sl.SaveToFile('C:\1.html');
  sl.Free;
end;

+ я нашел одну маленькую бажечку: После создания RichEdit, нужно сделать re.WordWrap := false;
Уже поправил в исходно посте.
PM MAIL   Вверх
Snowy
Дата 31.3.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Пофиксил еще одну багу - пропускались пустые строки.
Теперь нужна помощь: как задетектить URL?
Нужно TXT гиперссылки превращать в HTML гиперссылки.
как в тексте определить, что есть гиперссылка, а что нет?
PM MAIL   Вверх
_hunter
Дата 31.3.2006, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



так, как и все делают -- есть в тексте http:// ( https://, ftp:// ) -- ссылка, иначе -- нет.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Snowy
Дата 31.3.2006, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(_hunter @ 31.3.2006, 13:19 Найти цитируемый пост)
тексте http:// ( https://, ftp:// ) -- ссылка, иначе -- нет.
еще mailto.
Видимо так и придется.
А какие еще варианты бывают?
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1417 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.