PDF генерация в PHP: обзор библиотек и практические примеры
Создание PDF-документов — одна из частых задач в веб-разработке. От счетов и отчетов до сертификатов и книг — PDF остаётся универсальным форматом для обмена документами. В PHP существует несколько мощных библиотек, которые позволяют генерировать PDF как из HTML, так и программно. В этой статье мы разберём четыре популярных инструмента: TCPDF, FPDF, Dompdf и mPDF.
1. FPDF — лёгкая и быстрая классика
FPDF — одна из старейших и самых простых библиотек. Она не требует установки дополнительных расширений (кроме GD). Основное преимущество — минимализм и скорость. FPDF работает напрямую с координатами, что даёт полный контроль над расположением элементов.
Пример создания простого PDF:
<?php
require('fpdf.php');
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial', 'B', 16);
$pdf->Cell(40, 10, 'Привет, мир!');
$pdf->Output();
?>
Плюсы:
- Очень маленький размер (около 100 КБ)
- Не требует внешних зависимостей
- Поддержка UTF-8 через отдельные шрифты
Минусы:
- Сложная работа с HTML
- Ограниченная поддержка CSS
2. TCPDF — мощный и функциональный
TCPDF — это расширенная версия FPDF с поддержкой UTF-8, HTML, CSS, изображений, QR-кодов, цифровых подписей и многого другого. Это стандартный выбор для сложных документов.
Пример с HTML:
<?php
require_once('tcpdf/tcpdf.php');
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->AddPage();
$pdf->writeHTML('<h1>Заголовок</h1><p>Это абзац с <b>жирным</b> текстом.</p>');
$pdf->Output('example.pdf', 'I');
?>
Особенности:
- Полная поддержка Unicode и RTL (арабский, иврит)
- Встроенные шрифты (DejaVu, FreeSerif)
- Поддержка SVG, JavaScript, форм
3. Dompdf — генерация из HTML/CSS
Dompdf преобразует HTML и CSS в PDF. Это идеальный выбор, если у вас уже есть вёрстка страницы или шаблон. Dompdf поддерживает большинство CSS-свойств, но не все (например, Flexbox и Grid могут работать некорректно).
Пример:
<?php
require 'vendor/autoload.php';
use Dompdf\Dompdf;
$dompdf = new Dompdf();
$html = '<h2 style="color:red;">Красный заголовок</h2><p>Текст с отступами.</p>';
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$dompdf->stream("document.pdf");
?>
Плюсы:
- Простота: пишете HTML, получаете PDF
- Хорошая поддержка таблиц и изображений
Минусы:
- Требует PHP 7.1+ и расширения mbstring, dom
- Сложные CSS-макеты могут ломаться
4. mPDF — гибридный подход
mPDF — это библиотека, которая объединяет возможности TCPDF и Dompdf. Она отлично работает с HTML и CSS, поддерживает Unicode, таблицы, колонтитулы, водяные знаки. mPDF особенно хорош для создания книг и журналов.
Пример с CSS:
<?php
require_once __DIR__ . '/vendor/autoload.php';
$mpdf = new \Mpdf\Mpdf();
$html = '<div style="border:1px solid #000; padding:10px;">Содержимое блока</div>';
$mpdf->WriteHTML($html);
$mpdf->Output('output.pdf', 'I');
?>
Преимущества:
- Отличная поддержка CSS 2.1 и частично CSS3 <