Перейти к содержимому
Поиск
Php Разработка

PHP: полный мануал с примерами, функциями и ООП

Практический мануал PHP: от переменных и читаемого кода до безопасных форм, интеграций, базы данных и ООП на примере магазина. Учебный маршрут, поиск функций, подробные примеры, разбор ошибок и исходники для скачивания.

Александр НекрасовИзменено:
Практический мануал PHP: от переменных и функций к объектной модели интернет-магазина
PHP 8.5.11468 глав6256 карточек справочника
Дерево руководства

Глава 440 · От первой операции до полного справочника

wkhtmltox: превратить HTML в PDF или изображение из PHP

От строки HTML до PDF/PNG: настройки конвертера, несколько объектов, бинарный результат, ошибки и ограничения движка.

wkhtmltox: рендер HTML через QtWebKit

libwkhtmltox превращает HTML в PDF или растровое изображение через движок QtWebKit. PHP передаёт HTML/URL и настройки, получает бинарные байты и сам решает, сохранить ли файл, вернуть HTTP-ответ или отправить результат в хранилище.

Официальная страница: wkhtmltox.

Класс wkhtmltox\Image\Converter

Этот класс представляет HTML в PNG/JPEG и другие изображения. Конструктор фиксирует исходные данные и настройки; преобразование выполняется отдельным методом конвертера.

ОперацияОфициальное назначение
wkhtmltox\Image\Converter::__constructCreate a new Image converter
wkhtmltox\Image\Converter::convertPerform Image conversion
wkhtmltox\Image\Converter::getVersionDetermine version of Converter

Официальная страница: The wkhtmltox\Image\Converter class.

Класс wkhtmltox\PDF\Converter

Этот класс представляет один или несколько HTML-объектов в PDF. Конструктор фиксирует исходные данные и настройки; преобразование выполняется отдельным методом конвертера.

ОперацияОфициальное назначение
wkhtmltox\PDF\Converter::addAdd an object for conversion
wkhtmltox\PDF\Converter::__constructCreate a new PDF converter
wkhtmltox\PDF\Converter::convertPerform PDF conversion
wkhtmltox\PDF\Converter::getVersionDetermine version of Converter

Официальная страница: The wkhtmltox\PDF\Converter class.

Класс wkhtmltox\PDF\Object

Этот класс представляет один HTML-документ внутри PDF-конвертера. Конструктор фиксирует исходные данные и настройки; преобразование выполняется отдельным методом конвертера.

ОперацияОфициальное назначение
wkhtmltox\PDF\Object::__constructCreate a new PDF Object

Официальная страница: The wkhtmltox\PDF\Object class.

Runtime-настройка wkhtmltox.graphics

Директива wkhtmltox.graphics разрешает libwkhtmltox использовать графическую подсистему. Официальное значение по умолчанию — Off, область изменения — INI_SYSTEM | INI_PERDIR, директива отмечена с версии 0.3.2.

Официальная страница: Runtime Configuration.

Установка расширения wkhtmltox

Исходники расширения и Windows-сборки исторически размещались на GitHub. Для сборки PHP официальный источник указывает --with-wkhtmltox[=DIR]. После установки проверяют класс конвертера, getVersion() и пробный рендер автономного HTML без внешних ресурсов.

Официальная страница: Installation.

Требования libwkhtmltox

Нужна нативная libwkhtmltox. Официальная страница направляет к релизам wkhtmltopdf.org; на Windows каталог с wkhtmltox.dll должен быть доступен через PATH. Совместимость версии библиотеки и PHP-расширения проверяют вместе.

Официальная страница: Requirements.

Подготовка безопасного HTML-рендера

Контролируемый конвейер
  1. Сформировать HTML из шаблона и экранированных данных
  2. Разрешить только ожидаемые локальные ресурсы/URL
  3. Создать объект и добавить его в PDF-конвертер либо создать Image Converter
  4. Проверить сигнатуру и размер возвращённых байтов
  5. Открыть артефакт независимым читателем и записать версию движка в диагностику

Официальная страница: Installing/Configuring.

Что происходит между HTML и файлом

Конвейер рендера
  1. Подготовить валидный HTML с явной UTF-8
  2. Разрешить только контролируемые CSS, шрифты и изображения
  3. Передать глобальные настройки Converter и настройки объекта
  4. Получить бинарную строку из convert()
  5. Проверить сигнатуру, размер и открыть независимым просмотрщиком

Это отдельный браузерный движок. Страница, которая выглядит правильно в современном Chrome, может отличаться из-за другой версии WebKit, неподдерживаемого CSS, JavaScript или недоступного ресурса.

Практика: превью карточки заказа

Получить PNG-превью из самодостаточного HTMLПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox и libwkhtmltox');
}

$html = <<<'HTML'
<!doctype html>
<html lang="ru"><meta charset="utf-8">
<style>
body{font-family:Arial,sans-serif;margin:24px;color:#12343b}
.card{width:520px;padding:24px;border:2px solid #1b7f79;border-radius:16px}
.total{font-size:30px;font-weight:700;color:#c47a00}
</style>
<div class="card"><h1>Заказ №42</h1><p>К оплате</p><div class="total">12 500 ₽</div></div>
HTML;

$converter = new \wkhtmltox\Image\Converter($html, [
    'fmt' => 'png',
    'screenWidth' => '640',
    'smartWidth' => 'false',
]);
$png = $converter->convert();
if (!is_string($png) || !str_starts_with($png, "\x89PNG\r\n\x1a\n")) {
    throw new RuntimeException('Результат не имеет сигнатуру PNG');
}

$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
    throw new RuntimeException('Не создан каталог exports');
}
$path = $directory . '/order-42.png';
if (file_put_contents($path, $png, LOCK_EX) === false) {
    throw new RuntimeException('PNG не сохранён');
}
echo 'order-42.png', PHP_EOL;
echo 'format=PNG bytes>0', PHP_EOL;

Inline-CSS делает пример воспроизводимее: ему не нужны сетевые шрифты и относительные пути. После convert() проверяется реальная сигнатура изображения, а не только непустая строка. Runtime libwkhtmltox на текущем стенде пока не заявлен.
Что должно получиться в совместимом окружении: order-42.png
format=PNG bytes>0

Практика: PDF-счёт

Собрать PDF-счёт из HTML и проверить бинарный результатПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox и libwkhtmltox');
}

$html = '<!doctype html><html lang="ru"><meta charset="utf-8">'
    . '<style>@page{margin:16mm}body{font-family:Arial,sans-serif}</style>'
    . '<h1>Счёт №42</h1><table><tr><td>Итого</td><td>12 500 ₽</td></tr></table>';

$pdf = new \wkhtmltox\PDF\Converter([
    'size.pageSize' => 'A4',
    'margin.top' => '16mm',
    'margin.right' => '16mm',
    'margin.bottom' => '16mm',
    'margin.left' => '16mm',
    'documentTitle' => 'Invoice 42',
]);
$pdf->add(new \wkhtmltox\PDF\Object($html, [
    'web.defaultEncoding' => 'utf-8',
    'web.printMediaType' => 'true',
]));

$bytes = $pdf->convert();
if (!is_string($bytes) || !str_starts_with($bytes, '%PDF-')) {
    throw new RuntimeException('Конвертер не вернул PDF');
}
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
    throw new RuntimeException('Не создан каталог exports');
}
$path = $directory . '/invoice-42.pdf';
if (file_put_contents($path, $bytes, LOCK_EX) === false || !is_file($path)) {
    throw new RuntimeException('PDF не сохранён');
}
echo 'invoice-42.pdf', PHP_EOL;
echo 'format=PDF bytes>0', PHP_EOL;

PDF-объект сначала добавляется в Converter, и только затем вызывается convert(). Это устраняет типичную ошибку «конвертер создан, но в нём нет страниц». Runtime требует совместимого libwkhtmltox.
Что должно получиться в совместимом окружении: invoice-42.pdf
format=PDF bytes>0

Пустая страница, пропавший CSS и внешние ресурсы

СимптомЧто проверить
Пустой PDF/PNGДобавлен ли объект; что вернул convert(); начинается ли результат с %PDF- или PNG-сигнатуры.
Нет CSS или изображенияОтносительный URL, рабочий каталог, file access, сетевой доступ и права PHP-процесса.
Нет шрифтаДоступен ли font-файл движку; сетевой Google Font делает результат зависимым от сети.
JavaScript не успелНужен ли JS вообще; если нужен — ограниченный jsdelay и измеримый критерий готовности.
Работает только на одном сервереЗаписать Converter::getVersion(), версию libwkhtmltox и хеш HTML fixture.
Проблема из практикиКак она закрыта в руководстве
Пустой результат скрывает неверный вход, отсутствующую библиотеку или ошибку wrapper-а.Примеры проверяют тип и сигнатуру возвращённых байтов, а диагностика требует записывать версию движка.
Локальные CSS, шрифты и изображения не загружаются из относительных путей в контексте рендерера.Первый пример самодостаточен, а раздел отказов требует явных разрешённых ресурсов и объясняет отличие от браузерного контекста.

Как превратить отдельные вызовы в рабочий сервис

Спрячьте нативное расширение за одним прикладным классом: на вход он получает проверенную модель, внутри вызывает операции этой главы, а наружу возвращает путь или байты готового документа. Так HTTP-контроллер не знает о ресурсах, временных файлах и константах расширения.

Следующий шаг: добавить временный каталог на один запрос, журнал ошибок без секретных данных, лимит размера/времени и независимую проверку результата другим инструментом.

Функции и методы этой темы

Откройте карточку, чтобы увидеть договор функции, примеры, ограничения и связанные инструменты.

wkhtmltox\Image\Converter::__constructСоздать конвертер HTML в изображение и передать ему HTML и параметры рендера.

wkhtmltox >= 0.1.0 · wkhtmltox; libwkhtmltox

wkhtmltox\Image\Converter::__construct(string $buffer = ?, array $settings = ?): void

Создать конвертер HTML в изображение и передать ему HTML и параметры рендера.

Официальная сигнатура. wkhtmltox\Image\Converter::__construct(string $buffer = ?, array $settings = ?): void.

Доступность. Точная строка официального versions.xml: wkhtmltox >= 0.1.0.

ПараметрЧто приходит и зачем
string $buffer = значение по умолчаниюHTML как строка; он может прийти из шаблона, но пользовательские значения сначала экранируют.
Точная формулировка PHP Manual

HTML

array $settings = значение по умолчаниюМассив настроек движка. Разделяйте глобальные параметры документа и параметры отдельного объекта.
Точная формулировка PHP Manual

Name Description Values Changelog in URL or path of the input file, if "-" stdin is used /path/to/markup.html [gt]= 0.1.0 out path of output file, if "-" stdout is used, by default an internal buffer is used /path/to/output.png [gt]= 0.1.0 fmt output format to use "" default jpg output as JPEG png output as PNG bmp output as bitmap svg output as SVG [gt]= 0.1.0 transparent when outputting a PNG or SVG, make the white background transparent boolean [gt]= 0.1.0 screenWidth the with of the screen used to render in pixels 800 [gt]= 0.1.0 smartWidth when true, screenWidth is expanded to the content width boolean [gt]= 0.1.0 quality compression factor to use when outputting a JPEG image 94 [gt]= 0.1.0 crop.left left/x coordinate of the window to capture in pixels 200 [gt]= 0.1.0 crop.top top/y coordinate of the window to capture in pixels 200 [gt]= 0.1.0 crop.width width of the window to capture in pixels 200 [gt]= 0.1.0 crop.height height of the window to capture in pixels 200 [gt]= 0.1.0 load.cookieJar path of file used to load and store cookies /tmp/cookies.txt [gt]= 0.1.0

Возврат. Тип void. Официальная страница не содержит отдельного абзаца о возврате; ориентируйтесь на сигнатуру, предупреждения и реальный артефакт.

Где увидеть в целой задаче. получение проверенного PNG-превью. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, объекты и методы, файлы и каталоги.

Минимальная операция: wkhtmltox\Image\Converter::__constructПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$result = new \wkhtmltox\Image\Converter('<h1>Счёт №42</h1><p>Итого: 12 500 ₽</p>', ['fmt' => 'png', 'screenWidth' => 720]);
echo get_class($result), PHP_EOL;

wkhtmltox\Image\Converter::__construct: показан минимальный объектный жизненный цикл этой операции. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: wkhtmltox\Image\Converter

Сценарий сервиса: wkhtmltox\Image\Converter::__constructПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$result = new \wkhtmltox\Image\Converter('<h1>Акт №73</h1><p>Статус: готов</p>', ['fmt' => 'jpg', 'quality' => 90, 'screenWidth' => 1200]);
echo get_class($result), PHP_EOL;

wkhtmltox\Image\Converter::__construct: создаётся Image Converter с документированным форматом jpg; этот пример проверяет тип объекта, а байты изображения проверяются отдельно в convert(). Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: wkhtmltox\Image\Converter

Отказ и граница проверки. успех не имеет возвращаемого значения, поэтому проверяется последующий эффект. Разделяйте глобальные и объектные настройки, используйте самодостаточный HTML и разрешённые локальные ресурсы.

Полный официальный текст карточки на английском

Purpose: Create a new Image converter

Description Creates an Image converter, optionally taking an input buffer and configuration settings

Return:

wkhtmltox\Image\Converter::convertОтрисовать HTML и вернуть готовые байты изображения.

wkhtmltox >= 0.1.0 · wkhtmltox; libwkhtmltox

wkhtmltox\Image\Converter::convert(): string|null

Отрисовать HTML и вернуть готовые байты изображения.

Официальная сигнатура. wkhtmltox\Image\Converter::convert(): string|null.

Доступность. Точная строка официального versions.xml: wkhtmltox >= 0.1.0.

ПараметрЧто приходит и зачем
Параметров нетОперация использует конфигурацию расширения или состояние созданного объекта.

Возврат. Тип string|null. Официальный текст: Return Values Where the return value is used, it will be populated with the contents of the conversion buffer

Где увидеть в целой задаче. получение проверенного PNG-превью. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, объекты и методы, файлы и каталоги.

Минимальная операция: wkhtmltox\Image\Converter::convertПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$converter = new \wkhtmltox\Image\Converter('<h1>Счёт №42</h1><p>Итого: 12 500 ₽</p>', ['fmt' => 'png', 'screenWidth' => 720]);
$result = $converter->convert();
if (!is_string($result) || !str_starts_with($result, "\x89PNG\r\n\x1a\n")) { throw new RuntimeException('Изображение не имеет ожидаемой сигнатуры'); }
echo 'bytes=', strlen($result), PHP_EOL;

wkhtmltox\Image\Converter::convert: показан минимальный объектный жизненный цикл этой операции. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: bytes=<положительное число>; первые байты соответствуют выбранному PNG/JPEG.

Сценарий сервиса: wkhtmltox\Image\Converter::convertПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$converter = new \wkhtmltox\Image\Converter('<h1>Акт №73</h1><p>Статус: готов</p>', ['fmt' => 'jpg', 'quality' => 90, 'screenWidth' => 1200]);
$result = $converter->convert();
if (!is_string($result) || !str_starts_with($result, "\xFF\xD8")) { throw new RuntimeException('Изображение не имеет ожидаемой сигнатуры'); }
echo 'bytes=', strlen($result), PHP_EOL;
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
    throw new RuntimeException('Не создан каталог exports');
}
$path = $directory . '/delivery-73.jpg';
if (file_put_contents($path, $result, LOCK_EX) === false) { throw new RuntimeException('JPEG не сохранён'); }
echo basename($path), ' sha256=', hash_file('sha256', $path), PHP_EOL;

wkhtmltox\Image\Converter::convert: HTML преобразуется в JPEG с документированным fmt=jpg; проверяются сигнатура FF D8, сохранённый файл и его SHA-256. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: bytes=<положительное число>; первые байты FF D8. delivery-73.jpg sha256=<64 hex-символа>

Отказ и граница проверки. null нужно отличать от пустого результата. До convert() добавьте PDF Object или задайте HTML для Image Converter; затем проверьте тип, сигнатуру и ненулевой размер байтов.

Полный официальный текст карточки на английском

Purpose: Perform Image conversion

Description Performs conversion of the input buffer

Return: Return Values Where the return value is used, it will be populated with the contents of the conversion buffer

wkhtmltox\Image\Converter::getVersionУзнать версию libwkhtmltox, чтобы диагностировать различия рендера.

wkhtmltox >= 0.3.2 · wkhtmltox; libwkhtmltox

wkhtmltox\Image\Converter::getVersion(): string

Узнать версию libwkhtmltox, чтобы диагностировать различия рендера.

Официальная сигнатура. wkhtmltox\Image\Converter::getVersion(): string.

Доступность. Точная строка официального versions.xml: wkhtmltox >= 0.3.2.

ПараметрЧто приходит и зачем
Параметров нетОперация использует конфигурацию расширения или состояние созданного объекта.

Возврат. Тип string. Официальный текст: Return Values Returns a version string This is not yet implemented by libwkhtmltox

Где увидеть в целой задаче. получение проверенного PNG-превью. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, объекты и методы, файлы и каталоги.

Минимальная операция: wkhtmltox\Image\Converter::getVersionПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$converter = new \wkhtmltox\Image\Converter('<h1>Счёт №42</h1><p>Итого: 12 500 ₽</p>', ['fmt' => 'png', 'screenWidth' => 720]);
$result = $converter->getVersion();
echo $result, PHP_EOL;

wkhtmltox\Image\Converter::getVersion: показан минимальный объектный жизненный цикл этой операции. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: Строка версии, если она реализована используемой libwkhtmltox; официальный мануал предупреждает, что Image getVersion может быть не реализован.

Сценарий сервиса: wkhtmltox\Image\Converter::getVersionПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$converter = new \wkhtmltox\Image\Converter('<h1>Акт №73</h1><p>Статус: готов</p>', ['fmt' => 'jpg', 'quality' => 90, 'screenWidth' => 1200]);
$result = $converter->getVersion();
echo $result, PHP_EOL;

wkhtmltox\Image\Converter::getVersion: запрашивается только версия движка; пример не заявляет проверку изображения и сохраняет официальное предупреждение о возможной нереализованности метода. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: Строка версии, если она реализована используемой libwkhtmltox; официальный мануал предупреждает, что Image getVersion может быть не реализован.

Отказ и граница проверки. сначала проверяется заявленный тип результата. Пустая версия указывает на проблему загрузки связки extension/libwkhtmltox; записывайте её вместе с диагностикой рендера.

Полный официальный текст карточки на английском

Purpose: Determine version of Converter

Description Determines the version of Converter as reported by libwkhtmltox

Return: Return Values Returns a version string This is not yet implemented by libwkhtmltox

wkhtmltox\PDF\Converter::addДобавить в будущий PDF ещё один HTML-объект или страницу.

wkhtmltox >= 0.1.0 · wkhtmltox; libwkhtmltox

wkhtmltox\PDF\Converter::add(wkhtmltox\PDF\Object $object): void

Добавить в будущий PDF ещё один HTML-объект или страницу.

Официальная сигнатура. wkhtmltox\PDF\Converter::add(wkhtmltox\PDF\Object $object): void.

Доступность. Точная строка официального versions.xml: wkhtmltox >= 0.1.0.

ПараметрЧто приходит и зачем
wkhtmltox\PDF\Object $objectОбъект HTML-страницы wkhtmltox\PDF\Object, созданный до add().
Точная формулировка PHP Manual

The object to add

Возврат. Тип void. Официальная страница не содержит отдельного абзаца о возврате; ориентируйтесь на сигнатуру, предупреждения и реальный артефакт.

Где увидеть в целой задаче. сборку и проверку PDF из HTML. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, объекты и методы, файлы и каталоги.

Минимальная операция: wkhtmltox\PDF\Converter::addПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$converter = new \wkhtmltox\PDF\Converter(['size.pageSize' => 'A4', 'margin.top' => '12mm']);
$page = new \wkhtmltox\PDF\Object('<h1>Счёт №42</h1><p>Итого: 12 500 ₽</p>', ['useExternalLinks' => false, 'produceForms' => false]);
$converter->add($page);
echo 'page=added', PHP_EOL;

wkhtmltox\PDF\Converter::add: показан минимальный объектный жизненный цикл этой операции. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: page=added

Сценарий сервиса: wkhtmltox\PDF\Converter::addПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$converter = new \wkhtmltox\PDF\Converter(['size.pageSize' => 'A4', 'orientation' => 'Landscape']);
$page = new \wkhtmltox\PDF\Object('<h1>Акт №73</h1><p>Статус: готов</p>', ['useExternalLinks' => false, 'produceForms' => false]);
$converter->add($page);
echo 'page=added', PHP_EOL;
$appendix = new \wkhtmltox\PDF\Object('<h2>Приложение</h2><p>Позиции акта</p>', ['useExternalLinks' => false]);
$converter->add($appendix);
$bytes = $converter->convert();
if (!is_string($bytes) || !str_starts_with($bytes, '%PDF-')) { throw new RuntimeException('PDF не собран'); }
echo 'pages=2 pdf-bytes=', strlen($bytes), PHP_EOL;

wkhtmltox\PDF\Converter::add: используется другой HTML и параметры рендера; результат проверяется по типу либо сигнатуре соответствующего артефакта. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: pages=2 pdf-bytes=<положительное число>, сигнатура %PDF-.

Отказ и граница проверки. успех не имеет возвращаемого значения, поэтому проверяется последующий эффект. Добавляйте только созданный PDF Object; пустой конвертер закономерно не содержит страниц.

Полный официальный текст карточки на английском

Purpose: Add an object for conversion

Description Adds the given object to conversion

Return:

wkhtmltox\PDF\Converter::__constructСоздать PDF-конвертер с глобальными параметрами страницы и вывода.

wkhtmltox >= 0.1.0 · wkhtmltox; libwkhtmltox

wkhtmltox\PDF\Converter::__construct(array $settings = ?): void

Создать PDF-конвертер с глобальными параметрами страницы и вывода.

Официальная сигнатура. wkhtmltox\PDF\Converter::__construct(array $settings = ?): void.

Доступность. Точная строка официального versions.xml: wkhtmltox >= 0.1.0.

ПараметрЧто приходит и зачем
array $settings = значение по умолчаниюМассив настроек движка. Разделяйте глобальные параметры документа и параметры отдельного объекта.
Точная формулировка PHP Manual

Name Description Values Changelog size.pageSize paper size of output document A4 [gt]= 0.1.0 size.width with of the output document 210mm [gt]= 0.1.0 size.height height of the output document 297mm [gt]= 0.1.0 orientation orientation of the output document Landscape Portrait [gt]= 0.1.0 colorMode color mode of the output document Color Greyscale [gt]= 0.1.0 resolution resolution of the output document most likely has no effect [gt]= 0.1.0 dpi dpi to use while printing 80 [gt]= 0.1.0 pageOffset integer added to page numbers generating headers, footers, and toc [gt]= 0.1.0 copies [gt]= 0.1.0 collate collate copies boolean [gt]= 0.1.0 outline generate PDF outline boolean [gt]= 0.1.0 outlineDepth maximum depth of outline [gt]= 0.1.0 dumpOutline path of file to dump outline XML [gt]= 0.1.0 out path of output file, if "-" stdout is used [gt]= 0.1.0 documentTitle title for the output document [gt]= 0.1.0 useCompression enable or disable lossless compression boolean [gt]= 0.1.0 margin.top size of the top margin 2cm [gt]= 0.1.0 margin.bottom size of the bottom margin 2cm [gt]= 0.1.0 margin.left size of the left margin 2cm [gt]= 0.1.0 margin.right size of the right margin 2cm [gt]= 0.1.0 imageDPI maximum DPI for images in the output document [gt]= 0.1.0 imageQuality the jpeg compression factor for images in the output document 94 [gt]= 0.1.0 load.cookieJar path of file used to load and store cookies /tmp/cookies.txt [gt]= 0.1.0

Возврат. Тип void. Официальная страница не содержит отдельного абзаца о возврате; ориентируйтесь на сигнатуру, предупреждения и реальный артефакт.

Где увидеть в целой задаче. сборку и проверку PDF из HTML. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, объекты и методы, файлы и каталоги.

Минимальная операция: wkhtmltox\PDF\Converter::__constructПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$converter = new \wkhtmltox\PDF\Converter(['size.pageSize' => 'A4', 'margin.top' => '12mm']);
$result = $converter;
echo get_class($result), PHP_EOL;

wkhtmltox\PDF\Converter::__construct: показан минимальный объектный жизненный цикл этой операции. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: wkhtmltox\PDF\Converter

Сценарий сервиса: wkhtmltox\PDF\Converter::__constructПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$converter = new \wkhtmltox\PDF\Converter(['size.pageSize' => 'A4', 'orientation' => 'Landscape']);
$result = $converter;
echo get_class($result), PHP_EOL;
$result->add(new \wkhtmltox\PDF\Object('<h1>Акт №73</h1>', ['useExternalLinks' => false]));
$bytes = $result->convert();
if (!is_string($bytes) || !str_starts_with($bytes, '%PDF-')) { throw new RuntimeException('PDF не собран'); }
echo 'configured-pdf-bytes=', strlen($bytes), PHP_EOL;

wkhtmltox\PDF\Converter::__construct: используется другой HTML и параметры рендера; результат проверяется по типу либо сигнатуре соответствующего артефакта. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: wkhtmltox\PDF\Converter configured-pdf-bytes=<положительное число>.

Отказ и граница проверки. успех не имеет возвращаемого значения, поэтому проверяется последующий эффект. Разделяйте глобальные и объектные настройки, используйте самодостаточный HTML и разрешённые локальные ресурсы.

Полный официальный текст карточки на английском

Purpose: Create a new PDF converter

Description Creates a PDF converter, using optional configuration settings

Return:

wkhtmltox\PDF\Converter::convertСобрать добавленные HTML-объекты и вернуть байты PDF.

wkhtmltox >= 0.1.0 · wkhtmltox; libwkhtmltox

wkhtmltox\PDF\Converter::convert(): string|null

Собрать добавленные HTML-объекты и вернуть байты PDF.

Официальная сигнатура. wkhtmltox\PDF\Converter::convert(): string|null.

Доступность. Точная строка официального versions.xml: wkhtmltox >= 0.1.0.

ПараметрЧто приходит и зачем
Параметров нетОперация использует конфигурацию расширения или состояние созданного объекта.

Возврат. Тип string|null. Официальный текст: Return Values Where the return value is used, it will be populated with the contents of the conversion buffer

Где увидеть в целой задаче. сборку и проверку PDF из HTML. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, объекты и методы, файлы и каталоги.

Минимальная операция: wkhtmltox\PDF\Converter::convertПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$converter = new \wkhtmltox\PDF\Converter(['size.pageSize' => 'A4', 'margin.top' => '12mm']);
$page = new \wkhtmltox\PDF\Object('<h1>Счёт №42</h1><p>Итого: 12 500 ₽</p>', ['useExternalLinks' => false, 'produceForms' => false]);
$converter->add($page);
$result = $converter->convert();
if (!is_string($result) || !str_starts_with($result, '%PDF-')) { throw new RuntimeException('Полученные байты не похожи на PDF'); }
echo 'pdf-bytes=', strlen($result), PHP_EOL;

wkhtmltox\PDF\Converter::convert: показан минимальный объектный жизненный цикл этой операции. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: pdf-bytes=<положительное число>, сигнатура %PDF-.

Сценарий сервиса: wkhtmltox\PDF\Converter::convertПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$converter = new \wkhtmltox\PDF\Converter(['size.pageSize' => 'A4', 'orientation' => 'Landscape']);
$page = new \wkhtmltox\PDF\Object('<h1>Акт №73</h1><p>Статус: готов</p>', ['useExternalLinks' => false, 'produceForms' => false]);
$converter->add($page);
$result = $converter->convert();
if (!is_string($result) || !str_starts_with($result, '%PDF-')) { throw new RuntimeException('Полученные байты не похожи на PDF'); }
echo 'pdf-bytes=', strlen($result), PHP_EOL;
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
    throw new RuntimeException('Не создан каталог exports');
}
$path = $directory . '/delivery-73.pdf';
if (file_put_contents($path, $result, LOCK_EX) === false) { throw new RuntimeException('PDF не сохранён'); }
echo basename($path), PHP_EOL;

wkhtmltox\PDF\Converter::convert: используется другой HTML и параметры рендера; результат проверяется по типу либо сигнатуре соответствующего артефакта. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: pdf-bytes=<положительное число>, сигнатура %PDF-. delivery-73.pdf

Отказ и граница проверки. null нужно отличать от пустого результата. До convert() добавьте PDF Object или задайте HTML для Image Converter; затем проверьте тип, сигнатуру и ненулевой размер байтов.

Полный официальный текст карточки на английском

Purpose: Perform PDF conversion

Description Performs conversion of all previously added Objects

Return: Return Values Where the return value is used, it will be populated with the contents of the conversion buffer

wkhtmltox\PDF\Converter::getVersionУзнать версию PDF-движка libwkhtmltox для журнала диагностики.

wkhtmltox >= 0.3.2 · wkhtmltox; libwkhtmltox

wkhtmltox\PDF\Converter::getVersion(): string

Узнать версию PDF-движка libwkhtmltox для журнала диагностики.

Официальная сигнатура. wkhtmltox\PDF\Converter::getVersion(): string.

Доступность. Точная строка официального versions.xml: wkhtmltox >= 0.3.2.

ПараметрЧто приходит и зачем
Параметров нетОперация использует конфигурацию расширения или состояние созданного объекта.

Возврат. Тип string. Официальный текст: Return Values Returns a version string

Где увидеть в целой задаче. сборку и проверку PDF из HTML. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, объекты и методы, файлы и каталоги.

Минимальная операция: wkhtmltox\PDF\Converter::getVersionПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$converter = new \wkhtmltox\PDF\Converter(['size.pageSize' => 'A4', 'margin.top' => '12mm']);
$result = $converter->getVersion();
echo $result, PHP_EOL;

wkhtmltox\PDF\Converter::getVersion: показан минимальный объектный жизненный цикл этой операции. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: Строка версии libwkhtmltox.

Сценарий сервиса: wkhtmltox\PDF\Converter::getVersionПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$converter = new \wkhtmltox\PDF\Converter(['size.pageSize' => 'A4', 'orientation' => 'Landscape']);
$result = $converter->getVersion();
echo $result, PHP_EOL;
if (!is_string($result) || trim($result) === '') { throw new RuntimeException('Версия движка не определена'); }
echo 'renderer-version-recorded', PHP_EOL;

wkhtmltox\PDF\Converter::getVersion: используется другой HTML и параметры рендера; результат проверяется по типу либо сигнатуре соответствующего артефакта. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: Непустая строка версии libwkhtmltox. renderer-version-recorded

Отказ и граница проверки. сначала проверяется заявленный тип результата. Пустая версия указывает на проблему загрузки связки extension/libwkhtmltox; записывайте её вместе с диагностикой рендера.

Полный официальный текст карточки на английском

Purpose: Determine version of Converter

Description Determines the version of Converter as reported by libwkhtmltox

Return: Return Values Returns a version string

wkhtmltox\PDF\Object::__constructОписать один HTML-документ, который войдёт в итоговый PDF.

wkhtmltox >= 0.1.0 · wkhtmltox; libwkhtmltox

wkhtmltox\PDF\Object::__construct(string $buffer, array $settings = ?): void

Описать один HTML-документ, который войдёт в итоговый PDF.

Официальная сигнатура. wkhtmltox\PDF\Object::__construct(string $buffer, array $settings = ?): void.

Доступность. Точная строка официального versions.xml: wkhtmltox >= 0.1.0.

ПараметрЧто приходит и зачем
string $bufferHTML как строка; он может прийти из шаблона, но пользовательские значения сначала экранируют.
Точная формулировка PHP Manual

HTML

array $settings = значение по умолчаниюМассив настроек движка. Разделяйте глобальные параметры документа и параметры отдельного объекта.
Точная формулировка PHP Manual

Name Description Values Changelog page URL or path of the HTML to convert [gt]= 0.1.0 useExternalLinks set true to convert external links in the input into external PDF links in the output boolean [gt]= 0.1.0 useLocalLinks set true to convert internal links in the input into internal PDF links in the output boolean [gt]= 0.1.0 produceForms set true to turn HTML forms into PDF forms boolean [gt]= 0.1.0 replacements undocumented [gt]= 0.1.0 includeInOutline set true to include sections from this object in the outline and toc boolean [gt]= 0.1.0 pagesCount set true to make page count in toc inclusive of the number of pages in this object boolean [gt]= 0.1.0 tocXsl set to style sheet to convert this object into a toc object [gt]= 0.1.0 toc.useDottedLines set true to use dotted lines in toc boolean [gt]= 0.1.0 toc.captionText the caption text for toc [gt]= 0.1.0 toc.forwardLinks set true to create links from toc to content boolean [gt]= 0.1.0 toc.backLinks set true to create links from content to toc boolean [gt]= 0.1.0 toc.indentation indentation for toc 2em [gt]= 0.1.0 toc.fontScale the factor to scale down the font at every toc level 0.8 [gt]= 0.1.0 header.fontSize font size for use in header 13 [gt]= 0.1.0 header.fontName name of font for use in header times [gt]= 0.1.0 header.left text for left of header [gt]= 0.1.0 header.center text for center of header [gt]= 0.1.0 header.right text for right of header [gt]= 0.1.0 header.line enable or disable horizontal rule under header boolean [gt]= 0.1.0 header.spacing space between header and content 1.8 [gt]= 0.1.0 header.htmlUrl URL or path of HTML to use in header [gt]= 0.1.0 footer.fontSize font size for use in footer 13 [gt]= 0.1.0 footer.fontName name of font for use in footer times [gt]= 0.1.0 footer.left text for left of footer [gt]= 0.1.0 footer.center text for center of footer [gt]= 0.1.0 footer.right text for right of footer [gt]= 0.1.0 footer.line enable or disable horizontal rule under footer boolean [gt]= 0.1.0 footer.spacing space between footer and content 1.8 [gt]= 0.1.0 footer.htmlUrl URL or path of HTML to use in footer [gt]= 0.1.0 load.username user name to use when loging into a website bart [gt]= 0.1.0 load.password the password to used when logging into a website elbarto [gt]= 0.1.0 load.jsdelay the amount of time in milliseconds to wait after a page is loaded until it is captured 1200 [gt]= 0.1.0 load.zoomFactor how much zoom should be applied to the content 2.2 [gt]= 0.1.0 load.customHeaders custom headers to send when requesting the main web page [gt]= 0.1.0 load.repertCustomHeaders set true to send with all requests boolean [gt]= 0.1.0 load.cookies cookie string to send when requesting the main web page [gt]= 0.1.0 load.post post string to send when requesting the main web page [gt]= 0.1.0 load.blockLocalFileAccess disallow local and piped files to access other local files boolean [gt]= 0.1.0 load.stopSlowScript stop slow running javascript boolean load.debugJavascript allow javascript to raise warnings boolean [gt]= 0.1.0 load.loadErrorHandling set error handling strategy abort abort the convertion process skip do not add the object to the final output ignore try to add the object to the final output [gt]= 0.1.0 load.proxy [gt]= 0.1.0 web.background include background image in output boolean [gt]= 0.1.0 web.loadImages include images in output boolean [gt]= 0.1.0 web.enableJavascript enable or disable javascript boolean [gt]= 0.1.0 web.enableIntelligentShrinking enable to attempt to fit more content on page, only applies to PDF output boolean [gt]= 0.1.0 web.minimumFontSize the minimum font size allowed 9 [gt]= 0.1.0 web.printMediaType print content using print media type instead of screen media type boolean [gt]= 0.1.0 web.defaultEncoding content to use where no encoding is specified utf-8 [gt]= 0.1.0 web.userStyleSheet URL or path to a user specified style sheet /path/to/style.css [gt]= 0.1.0 web.enablePlugins enable or disable NS plugins boolean [gt]= 0.1.0

Возврат. Тип void. Официальная страница не содержит отдельного абзаца о возврате; ориентируйтесь на сигнатуру, предупреждения и реальный артефакт.

Где увидеть в целой задаче. сборку и проверку PDF из HTML. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, объекты и методы, файлы и каталоги.

Минимальная операция: wkhtmltox\PDF\Object::__constructПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$result = new \wkhtmltox\PDF\Object('<h1>Счёт №42</h1><p>Итого: 12 500 ₽</p>', ['useExternalLinks' => false, 'produceForms' => false]);
echo get_class($result), PHP_EOL;

wkhtmltox\PDF\Object::__construct: показан минимальный объектный жизненный цикл этой операции. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: wkhtmltox\PDF\Object

Сценарий сервиса: wkhtmltox\PDF\Object::__constructПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('wkhtmltox')) {
    throw new RuntimeException('Нужно расширение wkhtmltox');
}

$result = new \wkhtmltox\PDF\Object('<h1>Акт №73</h1><p>Статус: готов</p>', ['useExternalLinks' => false, 'produceForms' => false]);
echo get_class($result), PHP_EOL;
$converter = new \wkhtmltox\PDF\Converter(['size.pageSize' => 'A4']);
$converter->add($result);
$bytes = $converter->convert();
if (!is_string($bytes) || !str_starts_with($bytes, '%PDF-')) { throw new RuntimeException('Объект не вошёл в PDF'); }
echo 'object-rendered-bytes=', strlen($bytes), PHP_EOL;

wkhtmltox\PDF\Object::__construct: используется другой HTML и параметры рендера; результат проверяется по типу либо сигнатуре соответствующего артефакта. Runtime требует совместимые wkhtmltox extension и libwkhtmltox; локально выполнен lint.
Что должно получиться в совместимом окружении: wkhtmltox\PDF\Object object-rendered-bytes=<положительное число>.

Отказ и граница проверки. успех не имеет возвращаемого значения, поэтому проверяется последующий эффект. Разделяйте глобальные и объектные настройки, используйте самодостаточный HTML и разрешённые локальные ресурсы.

Полный официальный текст карточки на английском

Purpose: Create a new PDF Object

Description Creates a new PDF Object from the given buffer and optional configuration settings

Return:

Источники и обсуждения

Код и руководство с собой

Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.

Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.

Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.