На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Object Pascal / Перевод RTF в HTML (+) Сделать домашней страницей Добавить в избранное Написать писмо

Перевод RTF в HTML (+)


»»» Kuzmich (24.07.00 13:33)
Может кто поможет исходниками. Нужно написать программу перевода RTF в HTML Или может кто даст дельный совет...

»»» maestro - maestro@bashneft.ru (24.07.00 14:36)
Если быть не очень разборчивым в средствах, то первое, что приходит в голову, это использовать Word как OLE-сервер. "Открыть", "Сохранить как..."

»»» Kuzmich - boriskuzma@mail.ru (24.07.00 14:43)
Согласен можно, но он (Word) сует в столько билеберды в HTML, что повесится можно...

»»» Wonder (24.07.00 16:23)
Странно, но первое что пришло мне в голову, так это использовать TRichEdit. Загружать туда, потом, если надо, править, и, далее, по-выбору: либо сохранять просто текстом, а потом ручками в HTML, либо, если текст простой, т.е. текст безо всяких там таблиц и прочего форматирования, можно и автоматизировать слегка(теги там всякие простенькие вставлять автоматически, типа

, etc.). У меня то же самое работает через TMemo, но не с RTF, а с изначально текстовыми файлами. А при наличии форматирования устанешь эту автоматизацию писать.

»»» Kuzmich - boriskuzma@mail.ru (24.07.00 16:29)
Целью этой программы должен быть перевод огромных текстов, в которых присутствуют большие таблицы, так что "ручками" не подойдет

»»» Wonder (24.07.00 16:43)
Тогда учи Rich Text Format. Как там в нем таблицы и прочая ерунда определяется. И работать придется с самим форматом. Но, честно говоря, самому это делать - беда. Наверняка уже есть готовые погаммы на эту тему.
Правда, навряд ли на DELPHI.

»»» maestro - maestro@bashneft.ru (27.07.00 13:30)
Зайди сюда:
http://people.amursu.ru/klaus/delphi_pro2.htm#1

-= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-

Коментарий от Vladimir Khonin: k147@mail.ru
Здесь процедура, которую я использую для конвертации содержимого RichEdit
в код SGML. Она не создает полноценный HTML-файл, но Вы можете расширить
функциональность, указал, какие RTF-коды Вы желаете конвертировать в
какие-либо HTML-тэги.


function rtf2sgml (text : string) : string;
{Funktion for att konvertera en RTF-rad till SGML-text.}
var
temptext : string;
start : integer;
begin
text := stringreplaceall (text,'&','##amp;');
text := stringreplaceall (text,'##amp','&');
text := stringreplaceall (text,'\'+chr(39)+'e5','å');
text := stringreplaceall (text,'\'+chr(39)+'c5','Å');
text := stringreplaceall (text,'\'+chr(39)+'e4','ä');
text := stringreplaceall (text,'\'+chr(39)+'c4','Ä');
text := stringreplaceall (text,'\'+chr(39)+'f6','ö');
text := stringreplaceall (text,'\'+chr(39)+'d6','Ö');
text := stringreplaceall (text,'\'+chr(39)+'e9','é');
text := stringreplaceall (text,'\'+chr(39)+'c9','É');
text := stringreplaceall (text,'\'+chr(39)+'e1','á');
text := stringreplaceall (text,'\'+chr(39)+'c1','Á');
text := stringreplaceall (text,'\'+chr(39)+'e0','à');
text := stringreplaceall (text,'\'+chr(39)+'c0','À');
text := stringreplaceall (text,'\'+chr(39)+'f2','ò');
text := stringreplaceall (text,'\'+chr(39)+'d2','Ò');
text := stringreplaceall (text,'\'+chr(39)+'fc','ü');
text := stringreplaceall (text,'\'+chr(39)+'dc','Ü');
text := stringreplaceall (text,'\'+chr(39)+'a3','£');
text := stringreplaceall (text,'\}','#]#');
text := stringreplaceall (text,'\{','#[#');
text := stringreplaceall (text,'{\rtf1\ansi\deff0\deftab720','');{Skall alltid tas bort}
text := stringreplaceall (text,'{\fonttbl',''); {Skall alltid tas bort}
text := stringreplaceall (text,'{\f0\fnil MS Sans Serif;}','');{Skall alltid tas bort}
text := stringreplaceall (text,'{\f1\fnil\fcharset2 Symbol;}','');{Skall alltid tas bort}
text := stringreplaceall (text,'{\f2\fswiss\fprq2 System;}}','');{Skall alltid tas bort}
text := stringreplaceall (text,'{\colortbl\red0\green0\blue0;}','');{Skall alltid tas bort}
{I version 2.01 av Delphi finns inte \cf0 med i RTF-rutan. Tog darfor bort
det efter \fs16 och la istallet en egen tvatt av \cf0.}
//temptext := hamtastreng (text,'{\rtf1','\deflang');
//text := stringreplace (text,temptext,''); {Hamta och radera allt fran start till deflang}
text := stringreplaceall (text,'\cf0','');
temptext := hamtastreng (text,'\deflang','\pard');{Plocka fran deflang till pard for att fa }
text := stringreplace (text,temptext,'');{oavsett vilken lang det ar. Norska o svenska ar olika}
{Har skall vi plocka bort fs och flera olika siffror beroende pa vilka alternativ vi godkanner.}
//text := stringreplaceall (text,'\fs16','');{8 punkter}
//text := stringreplaceall (text,'\fs20','');{10 punkter}
{Nu stadar vi istallet bort alla tvasiffriga fontsize.}
while pos ('\fs',text) >0 do
 begin
   application.processmessages;
   start := pos ('\fs',text);
   Delete(text,start,5);
 end;
text := stringreplaceall (text,'\pard\plain\f0 ','

');
text := stringreplaceall (text,'\par \plain\f0\b\ul ','

');
text := stringreplaceall (text,'\plain\f0\b\ul ','

');
text := stringreplaceall (text,'\plain\f0','
');
text := stringreplaceall (text,'\par }','

');
text := stringreplaceall (text,'\par ','

');
text := stringreplaceall (text,'#]#','}');
text := stringreplaceall (text,'#[#','{');
text := stringreplaceall (text,'\\','\');
result := text;
end;

//This is cut directly from the middle of a fairly long save routine that calls the above function.
//I know I could use streams instead of going through a separate file but I have not had the time
to change this

           utfilnamn :=
mditted.exepath+stringreplace(stringreplace(extractfilename(pathname),'.TTT',''),'.ttt','') +
'ut.RTF';
            brodtext.lines.savetofile (utfilnamn);
            temptext := '';
            assignfile(tempF,utfilnamn);
            reset (tempF);
            try
               while not eof(tempF) do
                 begin
                    readln (tempF,temptext2);
                    temptext2 := stringreplaceall (temptext2,'\'+chr(39)+'b6','');
                    temptext2 := rtf2sgml (temptext2);
                    if temptext2 <>'' then temptext := temptext+temptext2;
                    application.processmessages;
                 end;
            finally
                   closefile (tempF);
            end;
            deletefile (utfilnamn);
            temptext := stringreplaceall (temptext,' ','');
            temptext := stringreplaceall (temptext,'

','

');
            temptext := stringreplaceall (temptext,'

'+chr(0),'

');
            temptext := stringreplaceall (temptext,'

','');
            temptext := stringreplaceall (temptext,'

','');
            temptext := stringreplaceall (temptext,'

','

');
            temptext := stringreplaceall (temptext,'','<#MELLIS>

');
            temptext := stringreplaceall (temptext,'<#MELLIS>','');
            temptext := stringreplaceall (temptext,'

','

');
            temptext := stringreplaceall (temptext,'

','

');
            temptext := stringreplaceall (temptext,'

-','

_');
            temptext := stringreplaceall (temptext,'

_','_');
            while pos('_',temptext)>0 do
              begin
                application.processmessages;
                temptext2 := hamtastreng (temptext,'_','

');
                temptext := stringreplace (temptext,temptext2+'

',temptext2+'');
                temptext := stringreplace (temptext,'_','-');
              end;
            writeln (F,''+temptext+'');

Copyright ©   "Мастера DELPHI"   E-mail:   delphi@mastak.com  http://www.delphimaster.ru
Источник получения информации: http://www.delphimaster.ru
Hosted by uCoz