Как сгенерировать pdf в Laravel

laravel экспорт в pdf

Экспорт PDF на сайте достаточно редкая,но важная функция. Нам нужен PDF-файл списка клиентов, счета-фактуры, баланса или любого другого отчета с данными. С помощью пакета Laravel и barryvdh/laravel-dompdf мы можем легко генерировать динамические PDF-файлы из нашего приложения. DomPDF может сгенерировать HTML в PDF, он также поддерживает CSS 2.1. Пакет laravel dompdf – это пакет-оболочка пакета PHP Dompdf. С его помощью мы можем легко конвертировать наше представление в PDF. В этом посте я покажу вам пошаговый процесс создания PDF-файла в приложении Laravel с помощью пакета barryvdh/laravel-dompdf на примере списка клиентов.

В этом посте нет конкретной версии Laravel. Тут и ларавел даже не особо требуется. С помощью этого пакета можно в любом фреймворке и без генерировать PDF.

Шаг 01: установите пакет barryvdh/laravel-dompdf.

composer require barryvdh/laravel-dompdf

Добавьте сервис провайдер в config/app.php

Barryvdh\DomPDF\ServiceProvider::class,

Там же в aliases

'PDF' => Barryvdh\DomPDF\Facade::class,

Шаг 02: создайте модель клиента.

php artisan make:model Customer -m
<?php

namespace App;
use Illuminate\Database\Eloquent\Model;

class Customer extends Model {

    public $fillable = ['name', 'email', 'phone', 'dob'];

}

Шаг 03: миграция

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateCustomersTable extends Migration
{
    
    public function up()
    {
        Schema::create('customers', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('email');
            $table->string('phone');
            $table->string('dob');
            $table->timestamps();
        });
    }

    
    public function down()
    {
        Schema::dropIfExists('customers');
    }
}

Шаг 04: определите маршрут.

Route::get('admin/customers','CustomerController@index');

Шаг 05: сделайте контроллер клиента.

php artisan make:controller CustomerController

Теперь выполните код для отображения отчета и создания PDF-файла этого отчета.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Customer;
use PDF;

class CustomerController extends Controller
{
    public function index(Request $request)
    {
        $data = Customer::all();

        if ($request->has('export')) {
            if ($request->get('export') == 'pdf') {
                $pdf = PDF::loadView('customers.index-pdf', compact('data'));
                return $pdf->download('customer-list.pdf');
            }
        }

        return view('customers.index', compact('data'));
    }
}

Как видите, у нас 2 шаблона. 1 используется для обычного отображения списка клиентов. Второй используется для генерации pdf

Шаг 6: представление для списка клиентов и ссылка на экспорт в пдф

@extends('admin.template')
@section('content')

	<div class="container mt-5">
		<div class="d-flex justify-content-between mb-2">
	        <p><strong>Customer List</strong></p>
	        <a class="btn btn-primary" href="{{ url('admin/customers?export=pdf') }}">Export to PDF</a>
	    </div>

	    <table class="table table-bordered mb-5">
	        <thead>
	            <tr>
	                <th scope="col">Name</th>
	                <th scope="col">E-mail</th>
	                <th scope="col">Phone</th>
	                <th scope="col">DOB</th>
	            </tr>
	        </thead>
	        <tbody>
	            @foreach($data as $row)
	            <tr>
	                <td>{{ $row->name }}</td>
	                <td>{{ $row->email }}</td>
	                <td>{{ $row->phone }}</td>
	                <td>{{ $row->dob }}</td>
	            </tr>
	            @endforeach
	        </tbody>
	    </table>
	</div>
@endsection

Шаблон представление для pdf

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Laravel PDF</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
  </head>
  <body>
    <h2 class="mb-3">Customer List</h2>
    <table class="table table-bordered">
    <thead>
      <tr>
        <th>Name</th>
        <th>E-mail</th>
        <th>Phone</th>
        <th>DOB</th>
      </tr>
      </thead>
      <tbody>
        @foreach ($data as $row)
        <tr>
            <td>{{ $row->name }}</td>
            <td>{{ $row->email }}</td>
            <td>{{ $row->phone }}</td>
            <td>{{ $row->dob }}</td>
        </tr>
        @endforeach
      </tbody>
    </table>
  </body>
</html>

Надеюсь, этот пошаговый учебник поможет вам узнать, как генерировать динамически PDF-файл в рамках Laravel. Если вам понравился этот пост, пожалуйста, поделитесь им с другими.

Рейтинг
( 5 оценок, среднее 4.4 из 5 )
Maxyc Webber/ автор статьи
Мне 35 лет. Опыт профессиональной разработки 15 лет. Занимаюсь разработкой и поддержкой корпоративных систем автоматизации бизнеса, а также высоконагруженными проектами. Мне нравится решать нестандартные проблемы бизнеса. Имею опыт формирования команд под проект, налаживания процесса разработки, коммуникации программистов и заказчиков. Есть опыт работы с зарубежными заказчиками (ОАЭ, Польша, Германия, Швейцария).
Понравилась статья? Поделиться с друзьями:
Комментарии: 3
  1. Алеща

    Еще один умник который забыл написать что с кирилицей этот пакет не работает….

    1. Maxyc Webber (автор)

      проблем не словил. все отлично работает с кириллицей

      1. Жавохир

        У меня тоже не работает место кирилица он поставляет ???? только

Добавить комментарий для Maxyc Webber Отменить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.