Skip to content

Миграция с DomPDF

Это руководство поможет вам мигрировать с DomPDF (dompdf/dompdf) на TCPDF-Next. Две библиотеки имеют принципиально разные философии проектирования — DomPDF является рендерером HTML/CSS-в-PDF, тогда как TCPDF-Next — это PDF-нативная библиотека с мощным движком рендеринга HTML.

Подход DomPDF vs подход TCPDF-Next

DomPDF рассматривает генерацию PDF как рендеринг HTML. Вы пишете HTML и CSS, и DomPDF конвертирует их в PDF. Это удобно, но ограничивает вас тем, что может выразить CSS, без доступа к нативным функциям PDF — цифровым подписям, шифрованию или соответствию PDF/A.

TCPDF-Next предлагает два подхода:

ПодходОписаниеЛучше для
Core APIПрямое построение PDF через PHP-методыТочные макеты, формы, графика, подписи
Artisan HTML RendererРендерер HTML/CSS на основе DOM (HtmlRenderer)Контент с большим количеством HTML, миграция с DomPDF

Для большинства миграций с DomPDF используйте Artisan HTML Renderer — он принимает ваши существующие HTML-шаблоны с минимальными изменениями.

Маппинг API

DomPDFTCPDF-NextПримечания
new Dompdf($options)PdfDocument::create()->build()Fluent builder
$dompdf->loadHtml($html)$renderer->writeHtml($html)Тот же HTML работает
$dompdf->loadHtmlFile($url)$renderer->writeHtmlFile($path)По умолчанию только локальные файлы
$dompdf->setPaper('A4', 'portrait')->setPageFormat(PageFormat::A4)На основе Enum
$dompdf->render()Автоматически при save() / toString()Нет явного шага рендеринга
$dompdf->output()$pdf->toString()Возвращает бинарную строку
$dompdf->stream('file.pdf')Хелперы ответов фреймворкаСм. примеры ниже
$options->set('defaultFont', ...)$renderer->setDefaultFont(...)
$options->set('isRemoteEnabled', true)ResourcePolicy::allowDomain(...)Явный allowlist
$options->set('chroot', $dir)ResourcePolicy::allowLocalDirectory(...)Более детальный контроль

Базовый пример миграции

DomPDF (до):

php
use Dompdf\Dompdf;
use Dompdf\Options;

$options = new Options();
$options->set('defaultFont', 'Helvetica');
$options->set('isRemoteEnabled', true);

$dompdf = new Dompdf($options);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
file_put_contents('output.pdf', $dompdf->output());

TCPDF-Next (после):

php
use YeeeFang\TcpdfNext\Document\PdfDocument;
use YeeeFang\TcpdfNext\Document\PageFormat;
use YeeeFang\TcpdfNext\Html\HtmlRenderer;

$pdf = PdfDocument::create()
    ->setPageFormat(PageFormat::A4)
    ->build();

$renderer = new HtmlRenderer($pdf);
$renderer->setDefaultFont('Helvetica', size: 12);
$renderer->writeHtml($html);

$pdf->save('output.pdf');

Сравнение поддержки CSS

Возможность CSSDomPDFTCPDF-Next
Box model (margin, padding, border)ДаДа
FloatsЧастичноЧастично
FlexboxНетНет
GridНетНет
position: absolute/relativeЧастичноДа
@font-faceДаДа
page-break-before/afterДаДа
background-imageЧастичноДа
border-radiusНетДа
opacityДаДа
CSS-переменные (--custom)НетНет
Media queriesНетТолько @media print
table layoutДаДа (улучшено)

TIP

HTML-рендерер TCPDF-Next поддерживает большинство свойств CSS 2.1 и некоторые свойства CSS 3. Flexbox и Grid не поддерживаются — используйте таблицы для сложных макетов. Если вы столкнётесь с различиями в рендеринге CSS, проверьте документацию HTML Renderer.

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

СценарийРекомендуемый подход
Миграция существующих HTML-шаблоновArtisan HTML Renderer
Пиксельно-точные макеты (счета, сертификаты)Core API
Требуются цифровые подписиCore API (подписание работает с обоими, но Core даёт больше контроля)
Соответствие PDF/AЛюбой (оба поддерживают PDF/A-4)
Штрих-коды / QR-кодыCore API (нативный векторный рендеринг)
Формы с заполняемыми полямиCore API
Простые отчёты из HTMLArtisan HTML Renderer

Сравнение производительности

МетрикаDomPDFTCPDF-NextУлучшение
Простой 1-страничный PDF62,1 мс8,2 мсВ 7,6x быстрее
20-страничный отчёт891 мс187 мсВ 4,8x быстрее
Пиковая память (1 стр.)22,1 МБ4,2 МБВ 5,3x меньше
Пиковая память (20 стр.)89,7 МБ12,4 МБВ 7,2x меньше
Размер выходного файла (1 стр.)31,8 КБ12,4 КБВ 2,6x меньше

Подробную методологию и дополнительные тест-кейсы смотрите в Бенчмарках производительности.

Новые возможности после миграции

Возможности TCPDF-Next, которые DomPDF не поддерживает:

  • Цифровые подписи — PAdES B-B до B-LTA с поддержкой аппаратных модулей безопасности.
  • Шифрование AES-256 — Защита документов на основе пароля и сертификата.
  • PDF/A-4 — Полное архивное соответствие (ISO 19005-4).
  • Tagged PDF / PDF/UA — Доступность для программ чтения с экрана.
  • Нативные штрих-коды — QR, Data Matrix, Code 128, EAN и другие как векторная графика.
  • Поля форм — Заполняемые текстовые поля, чекбоксы, выпадающие списки.
  • Потоки перекрёстных ссылок — Меньший размер файлов с современной структурой PDF.

Дополнительные материалы

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