#php #phpword
Вопрос достаточно простой, но ввиду 3х дневного головомойства никак не могу прийти к решению. Суть - есть библиотека PHPWord она умеет работать с шаблонами .docx. ОК! Далее: Создаю объект $phpword = new PHPWord(); открываю шаблон $tpl = $phpword->loadTemplate('tpl.docx'); В нем расставлены переменные по типу ${var} В PHP коде делаю как надо $tpl->setValue('var', 'Вставка данных на место переменной'); В конце, когда переменные вставлены нужно сохранить получившийся файл $tpl->save('mydoc.docx'); В библиотеке PHPWord можно передавать документ сразу на скачивание, если его генерация идет на лету вот таким вот способом $writer = PHPWord_IOFactory::createWriter($phpword, 'Word2007'); $writer->save('php://output'); Вопрос: Можно ли так же сделать с созданным шаблоном без его сохранения на диск? Пробовал засунуть вместо объекта $phpword - $tpl: получал вот такую строчку $phpword = new PHPWord(); $tpl = $phpword->loadTemplate('tpl.docx'); $tpl->setValue('var', 'Вставка данных на место переменной'); $writer = PHPWord_IOFactory::createWriter($tpl, 'Word2007'); $writer->save('php://output'); пробовал $tpl->save('php://output'); ничего не вышло. Может Вы подскажете?
Ответы
Ответ 1
Можно ли так же сделать с созданным шаблоном без его сохранения на диск? Если посмотрите код TemplateProcessor, то заметите что он всегда создает временный файл и работает уже с ним, вызов save() (у неё, кстати, нет параметров) же просто возвращает путь к этому временному файлу (а вот saveAs() позволяет переименовать этот временный файл во что-то нужное вам). Поэтому ответ: нельзя. задан "1 год назад" Не заметил... ну да ладно, с тех пор все равно ничего не поменялось :)Ответ 2
Как я сделал: $template->save('1.docx'); function file_force_download($file) { if (file_exists($file)) { // сбрасываем буфер вывода PHP, чтобы избежать переполнения памяти выделенной под скрипт // если этого не сделать файл будет читаться в память полностью! if (ob_get_level()) { ob_end_clean(); } // заставляем браузер показать окно сохранения файла header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); // читаем файл и отправляем его пользователю readfile($file); exit; } } file_force_download('1.docx'); unlink('1.docx'); Создал и сохранил в файл, отправил пользователю и удалил. Не знаю на сколько это эффективно, но мою проблему решило быстро.
Комментариев нет:
Отправить комментарий