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

icms2 пример

 
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
Создал экшен по выводу договора на основе шаблона. Самый простой способ нашел использовать rtf.
Код PHP:
  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, чтоб всякая остальная инфа не лезла. Но почему-то вначале файла вставляется пробел. Понять не могу из-за чего. Кто-нибудь сталкивался?
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3545
kirkr:
// Отправить сгенерированный документ в браузер
echo $output;
а так не пробовали?
Код PHP:
  1. // Отправить сгенерированный документ в браузер
  2. echo trim($output);
Реклама
cms
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
Loadырь:
а так не пробовали?
Да, пробел не выводом инфы появляется, а такое ощущение,что самой icms.

Переменная чистая, пробовал и ltrim
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3545
kirkr:
такое ощущение,что самой icms.
Скорее уж тогда самим php. У вас после отдачи заголовков нет ничего указывающего на действия "самой icms".
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
Loadырь, если просто вызывать, то выводит как надо без ошибок, если через экшн добавляется пробел.
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
Посетитель
small user social cms
Медаль
Сообщений: 779
kirkr:
Самый простой способ нашел использовать rtf
Где то на форуме обсуждалось формирование pdf из шаблона, не нашел, почему не pdf ?
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3545
Gumoff:
почему не pdf ?
Потому, что для формирования pdf нужно использовать стороннюю библиотеку. А для rtf ничего стороннего привлекать не надо.
Посетитель
small user social cms
Медаль
Сообщений: 779
Loadырь:

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

А rtf выбран для возможности скачать документ из браузера? Просто если только для просмотра, тогда почему не html?
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3545
Gumoff:
А rtf выбран для возможности скачать документ из браузера?
rtf позволяет скачать документ, открыть его в текстовом редакторе и вносить свои правки, с пдф и хтмл вносить правки куда сложнее.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3545
kirkr, а если не в поток выводить, а создать файл и отдать его ссылкой на скачивание?
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
Остается для меня загадка, всеж где вносится этот пробел чертов...
именно от extends cmsAction где-то прилетает.
Gumoff:

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

Но из-за пробела в начале документа, редакторы типа ворда думают что файл с крякозябрами идет, а если пробела нет, то формируется правильно RTF. Удобно при создании договоров и заполнении всяких бланков.
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
Loadырь:
если не в поток выводить, а создать файл и отдать его ссылкой на скачивание?

Да так реально можно и все ок. Пока придется делать так :((
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
Посетитель
small user social cms
Медаль
Сообщений: 779
Loadырь:

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

Возможно ли RTF отправлять на печать автоматически? То есть програмно посылать в очередь печати на принтер?
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3545
Gumoff:
Возможно ли RTF отправлять на печать автоматически?
Не знаю насколько актуальны эти функции, но вполне возможно сразу html отправлять в печать, минуя всякие rtfы.
kirkr, а вы при разработке каким браузером пользуетесь? У меня только мозилла нормально отдавала файл в поток и завершала отдачу корректно, хром и опера зависали до обновления страницы когда файл отдавали таким способом.
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
Loadырь:
irkr, а вы при разработке каким браузером пользуетесь? У меня только мозилла нормально отдавала файл в поток и завершала отдачу корректно, хром и опера зависали
Чтоб зависаний не было надо отдачу заголовков сделать через " ; "
Вот так:

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

Код PHP:
  1.  
  2. header( 'Content-Type: application/msword' );
  3. header( 'Content-Disposition: attachment; filename="cert.rtf"');
  4.  
Inline заставит браузер открыть файл внутри себя(если такое поддерживается браузером), а аттачмент заставит скачать в любом случае.
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.