Какой у вас опыт генерации PDF-файлов на PHP?

«Какой у вас опыт генерации PDF-файлов на PHP?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

У меня есть практический опыт генерации PDF в PHP-проектах, в основном с использованием библиотек **TCPDF** и **Dompdf**. Выбор зависит от задачи: * **TCPDF** я применял для сложных отчетов с кастомной графикой, штрих-кодами и полным контролем над размещением элементов. Он мощный, но требует больше кода для верстки. * **Dompdf** отлично подходит для быстрого рендеринга HTML/CSS в PDF. Я использовал его, когда уже были готовые HTML-шаблоны для писем или простых документов. **Пример типичного использования Dompdf в проекте:** ```php use DompdfDompdf; use DompdfOptions; $options = new Options(); $options->set('isRemoteEnabled', true); // Разрешаем загрузку внешних CSS/изображений $dompdf = new Dompdf($options); $html = '

Отчет по заказу #' . $orderId . '

'; $html .= '

Дата: ' . $date . '

'; $dompdf->loadHtml($html); $dompdf->setPaper('A4', 'portrait'); $dompdf->render(); // Либо вывод в браузер, либо сохранение на сервер $dompdf->stream("order_$orderId.pdf", ["Attachment" => false]); ``` **С какими сложностями сталкивался:** 1. **Поддержка современных CSS:** Dompdf не всегда корректно обрабатывает Flexbox/Grid. Приходилось использовать более простые табличные структуры для сложной верстки. 2. **Шрифты в TCPDF:** Необходимо явно добавлять и конфигурировать TTF-шрифты, что увеличивает объем работы. 3. **Производительность:** Очень большие HTML-документы или документы с множеством изображений могли приводить к превышению лимита памяти. Решалось оптимизацией шаблонов и увеличением `memory_limit` для скриптов генерации.