Формирование rtf из шаблона с данными из базы

icms2 пример

#1 16 ноября 2015 в 11:58
Создал экшен по выводу договора на основе шаблона. Самый простой способ нашел использовать rtf.
  1.  
  2. <?php
  3. class actionAbonentPrintDogovor extends cmsAction{
  4.  
  5. public function run($id=false){
  6. if(!$id){ cmsCore::error404();}
  7.  
  8. $dogovorf=$this->model->getIdADogovor($id);//Получаем все данные по договору
  9.  
  10. if(!$dogovorf){ cmsCore::error404();}
  11.  
  12.  
  13.  
  14.  
  15. // Сгенерировать заголовки, которые упростят браузеру
  16. // выбор требуемого приложения для визуализации
  17. header( 'Content-Type: application/msword' );
  18. header( 'Content-Disposition: inline, filename=cert.rtf');
  19.  
  20. $date = date( 'F d, Y' );
  21.  
  22. // Открыть файл шаблона
  23. $filename = __DIR__.'/dogovor.rtf'; //шаблон лежит в папке экшенов, сам файл без первого пробела.
  24.  
  25. $output = file_get_contents($filename);
  26.  
  27. // Заменить заполнители в шаблоне требуемыми данными
  28. $output = str_replace( '\{number\}', $dogovorf['id_dogovor'], $output );
  29. $output = str_replace( '<<Name>>', $name2, $output );
  30. $output = str_replace( '<<score>>', $score, $output );
  31. $output = str_replace( '<<mm/dd/yyyy>>', $date, $output );
  32.  
  33. // Отправить сгенерированный документ в браузер
  34. echo $output;
  35.  
  36. die();
  37.  
  38. }
  39. }
  40.  
  41.  
  42.  
die, чтоб всякая остальная инфа не лезла. Но почему-то вначале файла вставляется пробел. Понять не могу из-за чего. Кто-нибудь сталкивался?
#2 16 ноября 2015 в 12:53

// Отправить сгенерированный документ в браузер
echo $output;

kirkr
а так не пробовали?
  1. // Отправить сгенерированный документ в браузер
  2. echo trim($output);
#3 16 ноября 2015 в 13:04

а так не пробовали?

Loadырь
Да, пробел не выводом инфы появляется, а такое ощущение, что самой icms.

Переменная чистая, пробовал и ltrim
#4 16 ноября 2015 в 13:15

такое ощущение, что самой icms.

kirkr
Скорее уж тогда самим php. У вас после отдачи заголовков нет ничего указывающего на действия "самой icms".
#5 16 ноября 2015 в 13:20
Loadырь, если просто вызывать, то выводит как надо без ошибок, если через экшн добавляется пробел.
#6 16 ноября 2015 в 19:06

Самый простой способ нашел использовать rtf

kirkr
Где то на форуме обсуждалось формирование pdf из шаблона, не нашел, почему не pdf?
#7 16 ноября 2015 в 19:12

почему не pdf ?

Gumoff
Потому, что для формирования pdf нужно использовать стороннюю библиотеку. А для rtf ничего стороннего привлекать не надо.
#8 16 ноября 2015 в 19:31


почему не pdf ?

Gumoff
Потому, что для формирования pdf нужно использовать стороннюю библиотеку. А для rtf ничего стороннего привлекать не надо.

Loadырь

А rtf выбран для возможности скачать документ из браузера? Просто если только для просмотра, тогда почему не html?
#9 16 ноября 2015 в 19:42

А rtf выбран для возможности скачать документ из браузера?

Gumoff
rtf позволяет скачать документ, открыть его в текстовом редакторе и вносить свои правки, с пдф и хтмл вносить правки куда сложнее.
#10 16 ноября 2015 в 19:50
kirkr, а если не в поток выводить, а создать файл и отдать его ссылкой на скачивание?
#11 16 ноября 2015 в 19:51
Остается для меня загадка, всеж где вносится этот пробел чертов...
именно от extends cmsAction где-то прилетает.


А rtf выбран для возможности скачать документ из браузера?

Gumoff
rtf это почти Word документ, который легко править и вставлять свои переменные без левых библиотек.

Но из-за пробела в начале документа, редакторы типа ворда думают что файл с крякозябрами идет, а если пробела нет, то формируется правильно RTF. Удобно при создании договоров и заполнении всяких бланков.
#12 16 ноября 2015 в 19:59

если не в поток выводить, а создать файл и отдать его ссылкой на скачивание?

Loadырь

Да так реально можно и все ок. Пока придется делать так :((
#13 16 ноября 2015 в 20:02


А rtf выбран для возможности скачать документ из браузера?

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

Loadырь

Возможно ли RTF отправлять на печать автоматически? То есть програмно посылать в очередь печати на принтер?
#14 16 ноября 2015 в 20:10

Возможно ли RTF отправлять на печать автоматически?

Gumoff
Не знаю насколько актуальны эти функции, но вполне возможно сразу html отправлять в печать, минуя всякие rtfы.
kirkr, а вы при разработке каким браузером пользуетесь? У меня только мозилла нормально отдавала файл в поток и завершала отдачу корректно, хром и опера зависали до обновления страницы когда файл отдавали таким способом.
#15 17 ноября 2015 в 05:20

irkr, а вы при разработке каким браузером пользуетесь? У меня только мозилла нормально отдавала файл в поток и завершала отдачу корректно, хром и опера зависали

Loadырь
Чтоб зависаний не было надо отдачу заголовков сделать через "; "
Вот так:

  1.  
  2. header( 'Content-Type: application/msword' );
  3. header( 'Content-Disposition: inline; filename="cert.rtf"');
  4.  
второй вариант

  1.  
  2. header( 'Content-Type: application/msword' );
  3. header( 'Content-Disposition: attachment; filename="cert.rtf"');
  4.  
Inline заставит браузер открыть файл внутри себя(если такое поддерживается браузером), а аттачмент заставит скачать в любом случае.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.