Преобразовать HTML в PDF
Dompdf — конвертер HTML в PDF.
По своей сути, dompdf — это (в основном) совместимый с CSS 2.1 HTML-макет и механизм рендеринга, написанный на PHP. Это визуализатор, управляемый стилями: он загружает и считывает внешние таблицы стилей, встроенные теги стилей и атрибуты стиля отдельных элементов HTML. Он также поддерживает большинство презентационных атрибутов HTML.
Источник: Github
Функции
- Обрабатывает большинство свойств CSS 2.1 и несколько свойств CSS3, включая правила @import, @media и @page.
- Поддерживает большинство презентационных атрибутов HTML 4.0.
- Поддерживает внешние таблицы стилей, как локальные, так и через http/ftp (через fopen-wrappers)
- Поддерживает сложные таблицы, включая диапазоны строк и столбцов, отдельные и свернутые модели границ, индивидуальный стиль ячеек
- Поддержка изображений (gif, png (8, 24 и 32 бит с альфа-каналом), bmp и jpeg)
- Отсутствие зависимости от внешних библиотек PDF благодаря классу R&OS PDF
- Встроенная поддержка PHP
- Базовая поддержка SVG (см. «Ограничения» ниже)
Требования
- PHP версии 7.1 или выше
- расширение DOM
- Расширение MBString
- php-библиотека шрифтов
- PHP-SVG-библиотека
Обратите внимание, что некоторые необходимые зависимости могут иметь дополнительные зависимости (в частности, php-svg-lib требует sabberworm/php-css-parser).
Рекомендации
- OPcache (OPcache, XCache, APC и т. д.): повышает производительность.
- GD (для обработки изображений)
- Расширение IMagick или GMagick: повышает производительность обработки изображений.
О шрифтах и кодировке символов
Документы PDF внутренне поддерживают следующие шрифты: Helvetica, Times-Roman, Courier, Zapf-Dingbats и Symbol. Эти шрифты поддерживают только кодировку Windows ANSI. Чтобы в PDF-файле отображались символы, недоступные в Windows ANSI, необходимо указать внешний шрифт. Dompdf будет встраивать любой шрифт, на который ссылаются, в PDF-файл, если он предварительно загружен или доступен для dompdf и ссылки в правилах CSS @font-face. См. обзор шрифтов для получения дополнительной информации о том, как использовать шрифты.
Шрифты DejaVu TrueType были предварительно установлены, чтобы обеспечить dompdf достойный охват символов
Unicode по умолчанию. Чтобы использовать шрифты DejaVu, укажите ссылку на шрифт в таблице стилей,
например body { font-family: DejaVu Sans; } (для DejaVu Sans). Доступны следующие шрифты DejaVu 2.34: DejaVu Sans,
DejaVu Serif и DejaVu Sans Mono.
Установка
Установить с composer
Для установки с помощью Composer просто требуется последняя версия этого пакета.
composer require dompdf/dompdf
Убедитесь, что файл автозагрузки из Composer загружен.
// somewhere early in your project's loading, require the Composer autoloader
// see: http://getcomposer.org/doc/00-intro.md
require 'vendor/autoload.php';
Загрузить и установить Загрузите упакованный архив dompdf и распакуйте его в каталог, где будет находиться dompdf.
- Вы можете скачать стабильные копии dompdf с https://github.com/dompdf/dompdf/releases.
- Или загрузите ночную версию (последний неопубликованный код) с http://eclecticgeek.com/dompdf.
Используйте автозагрузчик упакованного релиза для загрузки dompdf, библиотек и вспомогательных функций в ваш PHP:
// include autoloader
require_once 'dompdf/autoload.inc.php';
Примечание. Пакетные выпуски именуются в соответствии с семантическим управлением
версиями (dompdf_MAJOR-MINOR-PATCH.zip). Таким образом, версия 1.0.0 будет иметь
имя dompdf_1-0-0.zip. Это единственная загрузка, включающая автозагрузчик для Dompdf
и все его зависимости.
Установить с помощью git
В командной строке перейдите в каталог, где будет находиться dompdf, и выполните следующие команды:
git clone https://github.com/dompdf/dompdf.git
cd dompdf/lib
git clone https://github.com/PhenX/php-font-lib.git php-font-lib
cd php-font-lib
git checkout 0.5.1
cd ..
git clone https://github.com/PhenX/php-svg-lib.git php-svg-lib
cd php-svg-lib
git checkout v0.3.2
cd ..
git clone https://github.com/sabberworm/PHP-CSS-Parser.git php-css-parser
cd php-css-parser
git checkout 8.1.0
Требуйте dompdf и его зависимости в вашем PHP. Подробности смотрите в автозагрузчике в проекте utils.
Быстрый старт
Просто передайте свой HTML в dompdf и выполните потоковую передачу вывода:
// reference the Dompdf namespace
use Dompdf\Dompdf;
// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml('hello world');
// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');
// Render the HTML as PDF
$dompdf->render();
// Output the generated PDF to Browser
$dompdf->stream();
Настройка параметров
Установите параметры во время создания экземпляра dompdf:
use Dompdf\Dompdf;
use Dompdf\Options;
$options = new Options();
$options->set('defaultFont', 'Courier');
$dompdf = new Dompdf($options);
или во время выполнения
use Dompdf\Dompdf;
$dompdf = new Dompdf();
$options = $dompdf->getOptions();
$options->setDefaultFont('Courier');
$dompdf->setOptions($options);
Требования к справочным ресурсам
Для защиты потенциально конфиденциальной информации Dompdf накладывает ограничения на файлы, на которые ссылаются в локальной файловой системе или в Интернете.
К файлам, доступ к которым осуществляется через веб-протоколы, предъявляются следующие требования:
- Для параметра Dompdf «isRemoteEnabled» должно быть установлено значение «true».
- В PHP должно быть либо включено расширение curl, либо для параметра
allow_url_fopenустановлено значениеtrue.
К файлам, доступ к которым осуществляется через локальную файловую систему, предъявляются следующие требования:
- Файл должен находиться в пределах путей, указанных для параметра Dompdf «chroot».
Ограничения (известные проблемы)
Ячейки таблицы не перелистываются, то есть строка таблицы должна помещаться на одной странице. Элементы отображаются на активной странице при их анализе. Встраивание «сырых» SVG ( ) еще не работает, вам нужно либо связать внешний файл SVG, либо использовать DataURI следующим образом:
$html = '<img src="data:image/svg+xml;base64,' . base64_encode($svg) . '" ...>';
Следите за прогрессом #320
- Не поддерживает CSS flexbox.
- Не поддерживает CSS Grid.