Все эти статьи в духе «Создание отчётов в Laravel за 5 минут» вызывают у меня ту же реакцию, что и советы «выйди из зоны комфорта» — хочется выбросить ноутбук в окно вместе с автором. Отчёты — это не про «пять минут», а про то, что тебя заё… ну, утомляет, но всё равно приходится делать. Руководство хочет «цифры в Excel», бухгалтерия «PDF с печатью», маркетинг «графики на дашборде». А ты сидишь и думаешь: чем бы быстрее отстреляться, чтобы тебя снова не припахали.
В общем, давай рассмотрим какие способы работают в Laravel и когда стоит юзать один вместо другого.
Blade и PDF через Dompdf
Самый ленивый способ — взять Blade-шаблон, влепить туда таблицу и скормить это всё Dompdf. Работает в 80% случаев, когда нужен тупой отчёт с табличкой.
public function generateReport()
{
$data = [
'title' => 'Отчёт о продажах',
'sales' => Sale::all(),
];
$pdf = PDF::loadView('reports.sales', $data);
return $pdf->download('sales_report.pdf');
}
Да, Dompdf иногда роняет верстку так, что хочется вызвать экзорциста, но если без изысков и без Flexbox — жить можно. Короче, отчёт для начальника «посмотреть цифры» — норм вариант.
Excel через Laravel Excel
Когда у тебя на горизонте бухгалтерия или «аналитики» (те самые ребята, которые любят крутить таблицы на три листа в ширину) — забудь про PDF. Excel рулит.
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\SalesExport;
public function exportSales()
{
return Excel::download(new SalesExport, 'sales.xlsx');
}
Laravel Excel — один из немногих пакетов, который реально экономит нервы. Хочешь выгрузку с фильтрами, хочешь пачку листов в одном файле — делается без геморроя. Тут я даже не буду язвить, библиотека просто работает.
Snappy и wkhtmltopdf
Dompdf тебя бесит, шрифты пляшут, таблицы кривые — значит пора ставить Snappy. Это обёртка над wkhtmltopdf. Тот самый инструмент, который рендерит HTML в PDF с почти реальной версткой. Почти.
use Knp\Snappy\Pdf;
public function generatePdfReport()
{
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf');
$html = view('reports.sales', ['sales' => Sale::all()])->render();
$pdf = $snappy->getOutputFromHtml($html);
return response($pdf, 200, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="sales_report.pdf"',
]);
}
Минус — ставить wkhtmltopdf на сервер, где крутится Laravel. Если это какой-нибудь shared-хостинг — забудь, без рута не поставишь. На нормальном сервере — ставится и пашет. Вёрстка сохраняется почти один в один, не нужно плясать с костылями.
Когда что юзать
- Blade + Dompdf — отчёт для руководителя: простая таблица, скачать и забыть.
- Laravel Excel — бухгалтерия и аналитики, которые любят всё крутить в Excel.
- Snappy (wkhtmltopdf) — когда нужен красивый PDF без убогих костылей.
По сути, на проекте почти всегда ставишь Laravel Excel, или на крайняк Snappy. Dompdf — для «сделать быстро и дешево».
Заключение
Создание отчётов в Laravel — это не выбор между «правильно» и «неправильно». Это выбор между «сделать быстро» и «сделать так, чтобы не материться через неделю». И вот если хочешь не материться — сразу бери Laravel Excel для выгрузок и Snappy для PDF.
0 комментариев