Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] генерация rtf документа из ШАБЛОНА с помощью php (http://forum.oszone.net/showthread.php?t=185504)

zvezda_t 15-09-2010 12:05 1495779

генерация rtf документа из ШАБЛОНА с помощью php
 
Здравствуйте!
Не работает подставка значений в заменител (<<name>>):

PHP код:

//выбор приложения для визуализации
    
header('Content-Type: application/msword');
    
header('Content-Disposition: inline, filename=cert.rtf');
    
        
$name1="Ivan";

    
//открыть файл шаблона
    
$filename 'PHPCert.rtf';
    
$output file_get_contents($filename);
            
    
//замена заполнителей в шаблоне
    
$output str_replace("<<name>>",$name1,$output);
    
    
//отправить сгенерированный документ в браузер
    
echo $output


Sham 16-09-2010 02:03 1496367

не вижу ошибок

zvezda_t 16-09-2010 08:10 1496433

Sham, скажите мне пожалуйста,

вот у меня есть обычный вордовский документ - как мне туда вставить данные из БД с помощью php?

Sham 16-09-2010 17:07 1496902

Цитата:

Цитата zvezda_t
обычный вордовский документ »

Это doc(x)? Проприетарный формат (закрытый то бишь), т.е. нормально изменять получиться только средствами MS, обычно через COM-объекты (готовых скриптов море).

Если речь о RTF-файле, то другое дело. RTF - открытый формат, редактируется в текстовом редакторе, и в MS Word. Можно поискать PHP-библиотеки для работы с rtf, но если требуется только поиск-замена, то имхо необязательно.

Кириллица в rtf преобразуется (не в открытом виде), хотя word и кириллицу понимает, хз.

zvezda_t 07-10-2010 20:14 1513816

А возможно из обычного word1.doc сделать rtf файл - чтоб уже в нём проще было работать с заменителями?

Можно какой нибудь примерчик - как используя com объекты заменить значения в шаблоне???

Sham 08-10-2010 15:46 1514368

Цитата:

Цитата zvezda_t
из обычного word1.doc сделать rtf файл »

если открыть в Word: меню Файл - Сохранить как - Текст в формате rtf (из списка "тип файла").
Цитата:

Цитата zvezda_t
как используя com объекты заменить значения в шаблоне »

посмотрите тут. Для PHP - имхо это изврат. RTF для этого больше подходит (с ним можно работать, как с текстовым файлом).

zvezda_t 09-10-2010 13:41 1514970

Цитата:

Цитата Sham
если открыть в Word: меню Файл - Сохранить как - Текст в формате rtf (из списка "тип файла"). »

я так и сделала, а потом вставила в текст документа: <<name>>
и использую скрипт из первого сообщения - замена не происходит(((

Закоментировала строчки:
//header('Content-Type: application/msword');
//header('Content-Disposition: inline, filename=cert.rtf');
и посмотрела в браузере что выводит:
Цитата:

{\rtf1\ansi\ansicpg1251\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1049\deflangfe104 9{\fonttbl{\f0\froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\f1\fswiss\fcharset204\fprq2{\*\panose 020b0604020202020204}Arial;}{\f2\fmodern\fcharset204\fprq1{\*\panose 02070309020205020404}Courier New;}{\f35\fswiss\fcharset204\fprq2{\*\panose 020b0604030504040204}Tahoma;} {\f36\fmodern\fcharset0\fprq1{\*\panose 02060609020000020004}Consultant{\*\falt Courier New};}{\f72\froman\fcharset0\fprq2 Times New Roman;}{\f70\froman\fcharset238\fprq2 Times New Roman CE;}{\f73\froman\fcharset161\fprq2 Times New Roman Greek;} {\f74\froman\fcharset162\fprq2 Times New Roman Tur;}{\f75\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f77\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f78
своего заменителя я там не нашла... Я что то не так делаю?

zvezda_t 09-10-2010 14:08 1514991

Цитата:

Цитата Sham
посмотрите тут. Для PHP - имхо это изврат. »

скачала класс для работы с com объектами, но там нет методов для вставки своих данных в шаблон...
можно только открыть, поставить закладку и сохранить документ((

Sham 09-10-2010 15:40 1515042

у меня сохраняет <<name>>. Наверно это касается только чистого doc(x) (не шаблон, без всяких спец-полей). Сохраните шаблон как обычный doc, и все спец-поля замените на простой текст <<>>, т.е. текст без всяких примочек word. Этот doc уже в rtf.
Цитата:

Цитата zvezda_t
но там нет методов для вставки своих данных в шаблон »

имхо, это общий пример. Изучайте скриптинг для Word (справка по скриптингу в нем есть). Имхо можно разобраться.

zvezda_t 09-10-2010 16:36 1515066

Цитата:

Цитата Sham
Наверно это касается только чистого doc(x) (не шаблон, без всяких спец-полей). Сохраните шаблон как обычный doc, и все спец-поля замените на простой текст <<>>, т.е. текст без всяких примочек word. Этот doc уже в rtf. »

Да, сохранила как Вы сказали - получилось) Большое спасибо!!! :-)

В итоге полученный файл сохраняется как .doc - то есть этот метод позволяет получить стандартный вордовский документ? (пользователи хотят на выходе иметь именно документ word)
Скажите пожалуйста, этот метод надёжный?

Sham 09-10-2010 17:14 1515087

Цитата:

Цитата zvezda_t
В итоге полученный файл сохраняется как .doc »

в этом формате (doc) можно сохранить только самим вордом. RTF - это текстовый файл, который можно редактировать в ворде. имхо юзеру все равно, какое расширение у файла, главное, что можно открыть и отредактировать в ворде (если не нужны какие-то особые примочки от MS).
если нужен именно формат doc, то c COM можно сохранить rtf-файл в doc, и отдавать уже его. Если нужна сложная обработка ворд-файла, то изучайте объекты/свойства Word для макросов/скриптов, или поищите готовые макросы...

zvezda_t 09-10-2010 17:23 1515089

Цитата:

Цитата Sham
если нужен именно формат doc, то c COM можно сохранить rtf-файл в doc, и отдавать уже его. »

то есть сначала обработать мой rtf файл, а потом сохранить его как .doc?
как его так сохранить? :)

Sham 09-10-2010 17:30 1515095

хз, имхо как в примере к классу :) (не тестил)
PHP код:

<?php
   
require_once("clsWord.php");

   
$input "C:\\Doc1.rtf";
   
$output "C:\\Doc1.doc";

   
$Word = new clsMSWord;
   
$Word->Open($input);
   
$Word->SaveAs($output);
   
$Word->Quit();

?>


zvezda_t 09-10-2010 17:33 1515099

а если я в заголовке вывожу как .doc - это не тоже самое?
PHP код:

//выбор приложения для визуализации
    
header('Content-Type: application/msword');
    
header('Content-Disposition: inline, filename=cert.doc');
    
        
$name1="Ivan";

    
//открыть файл шаблона
    
$filename 'PHPCert.rtf';
    
$output file_get_contents($filename);
            
    
//замена заполнителей в шаблоне
    
$output str_replace("<<name>>",$name1,$output);
    
    
//отправить сгенерированный документ в браузер
    
echo $output


Sham 09-10-2010 18:19 1515124

хе-хе, открывается...
формат все-равно будет rtf, даже если расширение будет .doc. Если это устраивает, то ок, но поведение word в этом случае надо отследить. Наверное, при сохранении юзером формат преобразуется в doc.

upd
не, формат не меняется при сохранении (word2003). Но имхо может поменяться при использовании какой-то чисто вордовской примочкой...

zvezda_t 09-10-2010 19:03 1515147

что то я запуталась...
А если с помощью html разметки сформировать документ и вывести через заголовки, то какой формат у документа будет?


PHP код:

header("Content-type: application/vnd.ms-word");
  
      
header("Content-Disposition: attachment;Filename=document_name.doc");
   
      echo 
"<html>";
   
      echo 
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\">";
  
      echo 
"<body>";
  
      echo 
"<b>Тело моего документа</b>";
  
      echo 
"</body>";
  
      echo 
"</html>"


Sham 09-10-2010 19:08 1515149

Формат html, расширение doc :). Это поведение той программы, с помощью которой открывается файл (видимо ворд не обращает внимание на расширение).

zvezda_t 09-10-2010 19:22 1515161

получается формат не имеет значения?
главное сохранить с расширением .doc?

Sham 09-10-2010 20:09 1515212

формат имеет значение, у каждого формата свои ограничения. rtf имхо наиболее сопоставим с doc. В остальном - зависит от софта.


Время: 21:21.

Время: 21:21.
© OSzone.net 2001-