Skip to content

Пакет Artisan

TCPDF-Next Artisan
Artisan · LGPL-3.0

Пакет Artisan (yeeefang/tcpdf-next-artisan) обеспечивает попиксельное преобразование HTML-в-PDF на основе Chrome DevTools Protocol (CDP). Он рендерит HTML с полной поддержкой CSS3 -- включая Flexbox, Grid, веб-шрифты, медиа-запросы и анимации, зафиксированные на момент рендеринга.

Когда использовать Artisan

СценарийРекомендация
Генерация PDF из HTML/CSS шаблоновArtisan
Программное построение PDF (ячейки, рисование)Core
HTML-письма в PDF-архивArtisan
Счёт-фактура из структурированных данныхCore или Artisan
Сложные CSS-макеты (Grid, Flexbox)Artisan
Подписанные/зашифрованные PDFCore

Как это работает

Artisan запускает экземпляр Chrome в headless-режиме через Chrome DevTools Protocol, загружает ваш HTML-контент в страницу браузера и использует встроенную функцию Chrome для печати в PDF. Это означает, что каждая CSS-функция, поддерживаемая Chrome, доступна для ваших PDF -- больше не нужно бороться с ограниченными CSS-парсерами.

HTML/CSS --> ChromeBridge --> Chrome CDP --> PDF binary --> save / stream

Установка

bash
composer require yeeefang/tcpdf-next-artisan

Требования:

  • PHP 8.2+
  • chrome-php/chrome ^1.15 (устанавливается автоматически)
  • Браузер Chrome или Chromium, установленный на хосте
bash
# Ubuntu/Debian
apt-get install -y chromium-browser

# macOS
brew install --cask chromium

# Windows (Chocolatey)
choco install googlechrome

# Set a custom path via environment variable
export CHROME_PATH=/usr/bin/google-chrome

Быстрый старт

php
use Yeeefang\TcpdfNext\Artisan\HtmlRenderer;

$renderer = HtmlRenderer::create();

$renderer
    ->loadHtml('<h1>Hello, World!</h1><p>Rendered with Chrome CDP.</p>')
    ->save('/output/hello.pdf');

Из URL

php
HtmlRenderer::create()
    ->loadUrl('https://example.com/report')
    ->save('/output/report.pdf');

Из файла

php
HtmlRenderer::create()
    ->loadFile('/templates/invoice.html')
    ->save('/output/invoice.pdf');

Содержимое пакета

КлассНазначение
HtmlRendererГлавная точка входа -- загрузка HTML, настройка, рендеринг
ChromeBridgeКоммуникация через Chrome DevTools Protocol
RenderOptionsКонфигурация рендеринга (поля, масштаб, колонтитулы)
PageSetupРазмер страницы и ориентация для рендеринга
PdfMergerОбъединение нескольких отрендеренных страниц в один PDF
StyleInjectorВнедрение CSS-стилей перед рендерингом
ScreenshotCaptureЗахват скриншотов страницы (PNG/JPEG)

Иерархия исключений

ИсключениеКогда возникает
RenderExceptionОбщая ошибка рендеринга
ChromeNotFoundExceptionБинарный файл Chrome не найден по ожидаемому пути
TimeoutExceptionЗагрузка страницы или рендеринг превысили настроенный таймаут

Все исключения находятся в namespace Yeeefang\TcpdfNext\Artisan\Exceptions и наследуют общий базовый класс ArtisanException.

Сравнение с HTML-парсером Core

Пакет Core включает модуль HtmlParser для базового преобразования HTML-в-PDF. Используйте его, когда нужно решение без зависимостей. Используйте Artisan, когда нужна полная точность рендеринга браузера.

ФункцияCore HtmlParserArtisan
Внешняя зависимостьНетChrome/Chromium
CSS Flexbox / GridНетДа
Веб-шрифты (@font-face)НетДа
Медиа-запросыНетДа
Выполнение JavaScriptНетДа
CSS-правила @pageНетДа
Производительность (простые документы)БыстрееМедленнее
Производительность (сложный CSS)Н/ДНадёжно

Далее

Распространяется по лицензии LGPL-3.0-or-later.