Как создать PDF-файл с php в Symfony 2 & 3 с помощью tcpdf

В настоящее время TCPDF является одним из самых активных проектов с открытым исходным кодом в мире, ежедневно используемым миллионами пользователей и включенным в тысячи CMS и веб-приложений для создания PDF-файлов с помощью php.

Чтобы использовать tcpdf в symfony 2, мы добавим пакет, который облегчит нам реализацию. В Symfony 2 рекомендуется использовать пакеты, вместо того чтобы использовать требование один раз в контроллере для включения нашей библиотеки. Создатель этого пакета (не библиотека PHPExcel) WhiteOctober и исходный код можно посмотреть в официальный репозиторий в github.

Для установки нашего пакета мы добавим файл composer.json в нужную зону

"whiteoctober/tcpdf-bundle": "dev-master",

Если вы используете composer непосредственно в консоли, выполните:

$ composer require whiteoctober/tcpdf-bundle

Когда требуемый компонент будет загружен, просто добавьте пакет к вашему ядру (файл AppKernel.php, расположенный в /app/AppKernel.php), так:

$bundles = array(
// ...
new WhiteOctober\TCPDFBundle\WhiteOctoberTCPDFBundle(),// register bundle
);

Создание PDF из HTML

TCPDF позволяет создавать PDF-файл из HTML-разметки (не правда ли?). Чтобы вернуть PDF в ответе, используйте следующий код:

public function returnPDFResponseFromHTML($html){
//set_time_limit(30); uncomment this line according to your needs
// If you are not in a controller, retrieve of some way the service container and then retrieve it
//$pdf = $this->container->get("white_october.tcpdf")->create('vertical', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
//if you are in a controlller use :
$pdf = $this->get("white_october.tcpdf")->create('vertical', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetAuthor('Our Code World');
$pdf->SetTitle(('Our Code World Title'));
$pdf->SetSubject('Our Code World Subject');
$pdf->setFontSubsetting(true);
$pdf->SetFont('helvetica', '', 11, '', true);
//$pdf->SetMargins(20,20,40, true);
$pdf->AddPage();
$filename = 'ourcodeworld_pdf_demo';
$pdf->writeHTMLCell($w = 0, $h = 0, $x = '', $y = '', $html, $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);
$pdf->Output($filename.".pdf",'I'); // This will output the PDF as a response directly
}

Предыдущий пример возвращает PDF-ответ прямо в браузере, теперь, если мы хотим использовать эту функцию в контроллере Symfony, мы можем просто вызвать функцию в любой строке. Да, вам не нужен специальный ответ Symfony, когда вы используете Output как онлайн PDF, это обрабатывается библиотекой TCPDF. Тогда в нашем контроллере мы можем использовать:

public function indexAction(){
// You can send the html as you want
//$html = 'Plain HTML';
// but in this case we will render a symfony view !
// We are in a controller and we can use renderView function which retrieves the html from a view
// then we send that html to the user.
$html = $this->renderView(
'Templates/template.html.twig',
array(
'someDataToView' => 'Something'
)
);
$this->returnPDFResponseFromHTML($html);
}

TCPDF делает вещи действительно простыми для разработчика. Вы можете прочитать официальная документация по TCPDF здесь а также все примеры здесь.

Ссылка на основную публикацию
Adblock
detector