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 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><path...></svg>
) еще не работает, вам нужно либо связать внешний файл SVG, либо использовать DataURI следующим образом:
$html = '<img src="data:image/svg+xml;base64,' . base64_encode($svg) . '" ...>';
Следите за прогрессом #320
- Не поддерживает CSS flexbox.
- Не поддерживает CSS Grid.