Преобразовать HTML в PDF

Преобразовать 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 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, библиотек и вспомогательных функций в ваш 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.