Как создать PDF из HTML в Symfony 4 с помощью Dompdf

Создание файлов 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 !");
}
}
Ссылка на основную публикацию
Adblock
detector