Какой у вас опыт генерации PDF-файлов на 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` для скриптов генерации.

Ответ 18+ 🔞

А, блядь, генерация PDF в PHP — это отдельная песня, я тебе скажу. У меня тут практический опыт овердохуища, в основном с двумя монстрами: **TCPDF** и **Dompdf**. Выбор, чувак, это как между молотком и шуруповёртом — зависит от того, что собираешься разъебать. * **TCPDF** — это когда тебе надо не просто бумажку, а ебучую картину нарисовать. Я его таскал для сложных отчётов, где нужны свои графики, штрих-коды, и чтобы каждый пиксель сидел ровно там, где ты сказал. Мощная штука, но готовься писать код для вёрстки, как будто на дворе 2002-й год и про CSS Grid никто не слышал. * **Dompdf** — это наш спаситель, когда уже есть готовый HTML-шаблон, красивый такой, и надо его просто в PDF запихнуть. Использовал для всяких писем-уведомлений или простых документов — быстро и, в основном, безболезненно. **Вот, смотри, как обычно с Dompdf работают, на живом примере:** ```php use DompdfDompdf; use DompdfOptions; $options = new Options(); $options->set('isRemoteEnabled', true); // Разрешаем тянуть картинки и стили снаружи, а то будет грустно $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.** Тут, блядь, отдельный квест. Нельзя просто взять и написать. Надо сначала шрифт добавить, сконфигурировать, потом молиться, чтобы он везде отобразился. Ядрёна вошь, а не процесс. 3. **Производительность.** Попробуй сгенерить PDF на 50 страниц с кучей картинок — скрипт может просто накрыться медным тазом, упёршись в лимит памяти. Приходилось шаблоны оптимизировать и `memory_limit` задирать до неприличных значений, лишь бы не падало. Волнение ебать, пока ждёшь результат.