Создание файлов PDF является обязательным в настоящее время в любом приложении. Хотя есть много библиотек, которые позволяют генерировать PDF-файлы из HTML в PHP, dompdf без сомнения является одной из любимых библиотек разработчиков благодаря своей простоте и эффективности при создании PDF-файлов на этом языке.
Dompdf — это совместимый с CSS 2.1 механизм разметки и рендеринга, написанный на PHP. Это средство визуализации, основанное на стилях: оно будет загружать и читать внешние таблицы стилей, встроенные теги стилей и атрибуты стиля отдельных элементов HTML. Он также поддерживает большинство презентационных атрибутов HTML.
В этой статье мы покажем вам, как создать файл PDF из HTML с помощью библиотеки Dompdf в вашем проекте на основе Symfony 4.
Требования
В этом руководстве мы будем использовать традиционную версию Symfony 4 для веб-приложений, которая включает Twig, Doctrine и т. Д. Мы напишем примеры, основанные на контроллерах Symfony и для создания PDF-файлов. Наш пример HTML будет храниться в файле Twig по адресу /project/templates/default/mypdf.html.twig
и содержит следующий HTML-код, который будет отображаться в формате PDF:
{# ./templates/default/mypdf.html.twig #}
Title of the PDF
{{ title }}
Lorem Ipsum
Мы отправим переменную, а именно название из контроллера. Зная это, давайте начнем!
1. Установите Dompdf
Предпочтительный способ обработки зависимостей в Symfony 4 — через Composer. На сайте Packagist есть пакет dompdf. Вы можете установить библиотеку Dompdf в свой проект Symfony с помощью следующей команды:
composer require dompdf/dompdf
После установки вы сможете использовать библиотеку и ее пространства имен. Для получения дополнительной информации об этой библиотеке, пожалуйста, посетите их официальный репозиторий на Github здесь или же официальный сайт здесь.
2. Создайте PDF-файлы, выполнив
Как разработчик, вы будете учиться на практике, а это значит, писать и запускать некоторый код! Мы покажем вам несколько традиционных примеров, которые вам часто понадобятся. Это случаи создания PDF-файла на диске (сохранение файла Excel в пути) и потокового ответа (встроенный файл расположения для просмотра PDF-файла). в браузере) или принудительно загрузите файл PDF (вложение):
А. Создать и заставить PDF файл скачать
Если вы хотите создать файл PDF и использовать его в качестве файла, чтобы пользователь мог загрузить его, вам не нужно записывать его на диск. Вместо этого вы можете передать ответ:
set('defaultFont', 'Arial');
// Instantiate Dompdf with our options
$dompdf = new Dompdf($pdfOptions);
// Retrieve the HTML generated in our twig file
$html = $this->renderView('default/mypdf.html.twig', [
'title' => "Welcome to our PDF Test"
]);
// Load HTML to Dompdf
$dompdf->loadHtml($html);
// (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
$dompdf->setPaper('A4', 'portrait');
// Render the HTML as PDF
$dompdf->render();
// Output the generated PDF to Browser (force download)
$dompdf->stream("mypdf.pdf", [
"Attachment" => true
]);
}
}
Б. Создание и просмотр PDF в браузере
Если вы хотите непосредственно просмотреть сгенерированный PDF-файл в браузере, просто установите для параметра вложения значение false во время потока:
set('defaultFont', 'Arial');
// Instantiate Dompdf with our options
$dompdf = new Dompdf($pdfOptions);
// Retrieve the HTML generated in our twig file
$html = $this->renderView('default/mypdf.html.twig', [
'title' => "Welcome to our PDF Test"
]);
// Load HTML to Dompdf
$dompdf->loadHtml($html);
// (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
$dompdf->setPaper('A4', 'portrait');
// Render the HTML as PDF
$dompdf->render();
// Output the generated PDF to Browser (inline view)
$dompdf->stream("mypdf.pdf", [
"Attachment" => false
]);
}
}
C. Создание и хранение PDF на диске
Если вы хотите сохранить PDF в своем хранилище, просто извлеките двоичные данные PDF и сохраните их в файл, вы можете сделать это с помощью file_put_contents
:
set('defaultFont', 'Arial');
// Instantiate Dompdf with our options
$dompdf = new Dompdf($pdfOptions);
// Retrieve the HTML generated in our twig file
$html = $this->renderView('default/mypdf.html.twig', [
'title' => "Welcome to our PDF Test"
]);
// Load HTML to Dompdf
$dompdf->loadHtml($html);
// (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
$dompdf->setPaper('A4', 'portrait');
// Render the HTML as PDF
$dompdf->render();
// Store PDF Binary Data
$output = $dompdf->output();
// In this case, we want to write the file in the public directory
$publicDirectory = $this->get('kernel')->getProjectDir() . '/public';
// e.g /var/www/project/public/mypdf.pdf
$pdfFilepath = $publicDirectory . '/mypdf.pdf';
// Write file to the desired path
file_put_contents($pdfFilepath, $output);
// Send some text response
return new Response("The PDF file has been succesfully generated !");
}
}