Ответ
У меня есть практический опыт генерации 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` задирать до неприличных значений, лишь бы не падало. Волнение ебать, пока ждёшь результат.