Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Perl и rtf


Автор: Biggelow 11.1.2009, 15:10
Всем привет!

Есть файл(в формате rtf) в котором есть следующие строчки ###name###, ###adress### и т.д. Надо его открыть и вместо этих строчек вписать данные и выдать пользователю.

Кто-нибудь с этим сталкивался?

Автор: Ramirez 11.1.2009, 16:05
Похоже, что придется выкручиваться средствами:

Код

RTF::Reader
RTF::Writer
RTF::Tokenizer



Автор: Biggelow 12.1.2009, 12:25
Только вот как этим всем воспользоваться?
Есть пример использования RTF::Tokenizer?

Автор: amg 12.1.2009, 15:11
Цитата(Biggelow @  11.1.2009,  15:10 Найти цитируемый пост)
Есть файл(в формате rtf) в котором есть следующие строчки ###name###, ###adress### и т.д. Надо его открыть и вместо этих строчек вписать данные и выдать пользователю.
Не понял проблемы. rtf -- текстовый формат. Если файл в формате rtf в качестве темплата уже есть, то просто берешь и меняешь, как в любом текстовом файле. (Правда, с русскими буквами, возможно, сложнее). 

Другое дело, сгенерировать rtf самому. Модули для этого есть, но, насколько мне известно, все они низкоуровненвые, чтобы ими пользоваться, надо хорошо знать формат RTF. Если нет жесткой привязки к RTF, то, наверное, проще всего генерировать файл latex и выдавать пользователю в pdf (я в конце концов сделал именно так для решения подобной задачи).

Автор: des00 18.1.2009, 18:57
я делал аналогичное. открываешь как текстовый файл и через ~s/// меняешь то что надо

только русские символы обработать надо

Код

sub rus2rtf{
    my @rtf=('\\\'c9','\\\'d6','\\\'d3','\\\'ca','\\\'c5','\\\'cd','\\\'c3','\\\'d8','\\\'d9','\\\'c7','\\\'d5','\\\'da','\\\'d4','\\\'db','\\\'c2','\\\'c0','\\\'cf','\\\'d0','\\\'ce','\\\'cb','\\\'c4','\\\'c6','\\\'dd','\\\'df','\\\'d7','\\\'d1','\\\'cc','\\\'c8','\\\'d2','\\\'dc','\\\'c1','\\\'de','\\\'a8','\\\'e9','\\\'f6','\\\'f3','\\\'ea','\\\'e5','\\\'ed','\'e3','\\\'f8','\\\'f9','\\\'e7','\\\'f5','\\\'fa','\\\'f4','\\\'fb','\\\'e2','\\\'e0','\\\'ef','\\\'f0','\\\'ee','\\\'eb','\\\'e4','\\\'e6','\\\'fd','\\\'ff','\\\'f7','\\\'f1','\\\'ec','\\\'e8','\\\'f2','\\\'fc','\\\'e1','\\\'fe','\\\'b8');
    my @rus=('Й','Ц','У','К','Е','Н','Г','Ш','Щ','З','Х','Ъ','Ф','Ы','В','А','П','Р','О','Л','Д','Ж','Э','Я','Ч','С','М','И','Т','Ь','Б','Ю','Ё','й','ц','у','к','е','н','г','ш','щ','з','х','ъ','ф','ы','в','а','п','р','о','л','д','ж','э','я','ч','с','м','и','т','ь','б','ю','ё');
     
    my $input=shift;
     
    my @letters=split //,$input;
     
    for (my $i=0;$i<=scalar @letters;$i++)
    {
        for (my $ii = 0; $ii < $#rus; $ii++)
        {
            if ($letters[$i] eq $rus[$ii])
                {
                    $letters[$i]=$rtf[$ii];
                }
        }
    }
    my $temp=join '',@letters;
    return $temp;
} 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)