Я работаю над проектом Symfony 1.4. Мне нужно сделать ссылку для загрузки в PDF для ваучера (пока еще), и я должен сказать, что я немного смущен. У меня уже есть HTML/CSS для ваучера, я создал кнопку загрузки в правом представлении, но я не знаю, куда идти оттуда.Создать PDF из HTML/CSS/PHP в Symfony 1.4
ответ
Use Mpdf to create the pdf file
http://www.mpdf1.com/
Использовать wkhtmltopdf, если возможно. Это, безусловно, лучший html2pdf конвертер, который может использовать php-кодер.
А потом сделать что-то вроде этого (не проверял, но должно быть довольно близко):
public function executeGeneratePdf(sfWebRequest $request)
{
$this->getContext()->getResponse()->clearHttpHeaders();
$html = '*your html content*';
$pdf = new WKPDF();
$pdf->set_html($html);
$pdf->render();
$pdf->output(WKPDF::$PDF_EMBEDDED, 'whatever_name.pdf');
throw new sfStopException();
}
Использовав wkhtmltopdf некоторое время я переехал от него, как 1) она имеет некоторые серьезные ошибки и 2) постоянное развитие замедлилось. Я перешел на PhantomJS, который оказался намного лучше с точки зрения функциональности и эффективности.
Как только у вас на компьютере есть что-то вроде wkhtmltopdf или PhantomJS, вам нужно сгенерировать HTML-страницу и передать ее вместе с ней. Я приведу вам пример, предполагающий, что вы используете PhantomJS.
Первоначально заданы параметры каждого запроса, необходимые для шаблона.
$this->getRequest->setParamater([some parameter],[some value]);
Затем вызовите функцию getPresentation()
для генерации HTML из шаблона. Это вернет полученный HTML-код для конкретного модуля и действия.
$html = sfContext::getInstance()->getController()->getPresentation([module],[action]);
Вам нужно будет заменить относительные пути CSS абсолютным путем CSS в файле HTML. Например, запустив preg_replace
.
$html_replaced = preg_replace('/"\/css/','"'.sfConfig('sf_web_dir').'/css',$html);
Теперь напишите HTML-страницу для преобразования в PDF-файл.
$fp = fopen('export.html','w+');
fwrite($fp,$html_replaced);
fclose($fp)
exec('/path/to/phantomjs/bin/phantomjs /path/to/phantomjs/examples/rasterize.js /path/to/export.html /path/to/export.pdf "A3");
Теперь отправить PDF пользователю:
$this->getResponse()->clearHttpHeaders();
$this->getResponse()->setHttpHeader('Content-Description','File Transfer');
$this->getResponse()->setHttpHeader('Cache-Control','public, must-revalidate, max-age=0');
$this->getResponse()->setHttpHeader('Pragma: public',true);
$this->getResponse()->setHttpHeader('Content-Transfer-Encoding','binary');
$this->getResponse()->setHttpHeader('Content-length',filesize('/path/to/export.pdf'));
$this->getResponse()->setContentType('application/pdf');
$this->getResponse()->setHttpHeader('Content-Disposition','attachment; filename=export.pdf');
$this->getResponse()->setContent(readfile('/path/to/export.pdf'));
$this->getResponse()->sendContent();
Вам необходимо установить заголовки в противном случае браузер делает странные вещи. Имя файла для сгенерированного HTML-файла и экспорта должно быть уникальным, чтобы избежать ситуации, когда два человека генерируют PDF-ваучеры, одновременно сталкиваясь. Вы можете использовать что-то вроде sha1(time())
, чтобы добавить рандомизированный хеш к стандартному имени, например. 'export_'.sha1(time());
- 1. Symfony 1.4 создать маршрут для файлов pdf
- 2. Использование PrinceXML в Symfony 1.4
- 3. Как создать прозрачный эскиз в symfony 1.4?
- 4. Получить шаблон из Symfony 1.4
- 5. validation В symfony 1.4
- 6. комплекты в symfony 1.4?
- 7. динамические поддомены в Symfony 1.4
- 8. Symfony 1.4 Форма Creater
- 9. Symfony 1.4 Custom Form
- 10. Как сгенерировать PDF с помощью sfTCPDFPlugin в symfony 1.4?
- 11. Symfony 1.4 Form Templating
- 12. Интеграция OpenID в Symfony 1.4?
- 13. Symfony 1.4 Динамические шаблоны
- 14. symfony 1.4 clear cache
- 15. Symfony 1.4: Удаление sfGuardUser
- 16. Symfony 1.4 routing issue
- 17. Symfony 1.4 и angularJS
- 18. Symfony 1.4 - format_currency API
- 19. Symfony 1.4, Doctrine speedup
- 20. Symfony 1.4 https
- 21. Symfony 1.4 и sfPHPExcelPlugin
- 22. Установка Symfony 1.4
- 23. Использование Propel в Symfony 1.4
- 24. Symfony 1.4 doctrine create table
- 25. Как вручную создать новый сеанс в symfony 1.4
- 26. Извлечь частичную задачу из Symfony 1.4
- 27. Как получить значение из формы (symfony 1.4)
- 28. Symfony and doctrine searchable sfDoctrinePager (symfony 1.4)
- 29. Symfony 1.4: конфигурация электронной почты
- 30. Встроенное отношение с symfony 1.4
Также можно посмотреть на dompdf и tcpdf – Dave
Теперь я пытаюсь использовать tcpdf. Я выполнил инструкции по этой [ссылке] (http://www.symfony-project.org/plugins/sfTCPDFPlugin), но как включить модуль 'sfTCPDF' в файле' settings.yml'? – halpsb
Вам не нужно менять settings.yml, просто добавьте/включите плагин в файле ProjectConfiguration. Следуйте настройке установки файла README, чтобы настроить его правильно и очистить кеш Symfony. – xtrm