Como gerar PDF com Laravel 10


Neste tutorial, será apresentado como gerar PDF com Laravel 10. 

Primeiramente, será mostrado como usar o Dompdf no Laravel. 

Em seguida, será apresentado como gerar PDF com o Dompdf. 

Por fim, será mostrado como pesquisar e gerar o PDF da pesquisa com Laravel 10.


Download do código fonte desenvolvido na aula: Download

Curso de Laravel: Mais Detalhes do Curso

Playlist completa sobre Laravel: Acessar

Receber as aulas gratuitas do curso de Laravel: Acessar


Para começar, é utilizado como base o projeto da aula "Como pesquisar entre datas com Laravel 10".

Para gerar PDF, será utilizada a biblioteca DOMPDF, e para instalá-la, será utilizado o Composer.

composer require barryvdh/laravel-dompdf

Após instalar a biblioteca, foi criada a rota 'gerar-pdf-conta' no arquivo 'routes/web.php'.

Route::get('/gerar-pdf-conta', [ContaController::class, 'gerarPdf'])->name('conta.gerar-pdf');

Na view listar 'resources/views/contas/index.blade.php', acrescentado o botão que chama a controller para gerar o PDF.

<a href="{{ route('conta.gerar-pdf') }}" class="btn btn-warning btn-sm">Gerar PDF</a>

Na controller 'app/Http/Controllers/ContaController.php', criado o método 'gerarPdf'. No mesmo, são recuperadas as contas, indicada a VIEW que deve ser utilizada para imprimir o conteúdo do PDF, bem como a orientação e o tamanho do arquivo. Para finalizar, é realizado o download do PDF.

// Gerar PDF
public function gerarPdf(Request $request){

    // Recuperar os registros do banco dados
    $contas = Conta::orderByDesc('created_at')->get();

    // Carregar a string com o HTML/conteúdo e determinar a orientação e o tamanho do arquivo
    $pdf = PDF::loadView('contas.gerar-pdf', ['contas' => $contas])->setPaper('a4', 'portrait');

    // Fazer o download do arquivo
    return $pdf->download('listar_contas.pdf');
    
}

Criada a VIEW 'resources/views/contas/gerar-pdf.blade.php', que será o conteúdo do PDF.

<!DOCTYPE html>
<html lang="pt-br">

<head>
    <meta charset="UTF-8">
    <title>Contas</title>
</head>

<body style="font-size: 12px;">
    <h2 style="text-align: center">Contas</h2>

    <table style="border-collapse: collapse; width: 100%;">
        <thead>
            <tr style="background-color: #adb5bd;">
                <th style="border: 1px solid #ccc;">ID</th>
                <th style="border: 1px solid #ccc;">Nome</th>
                <th style="border: 1px solid #ccc;">Valor</th>
                <th style="border: 1px solid #ccc;">Vencimento</th>
            </tr>
        </thead>

        <tbody>
            @forelse ($contas as $conta)
                <tr>
                    <td style="border: 1px solid #ccc; border-top: none;">{{ $conta->id }}</td>
                    <td style="border: 1px solid #ccc; border-top: none;">{{ $conta->nome }}</td>
                    <td style="border: 1px solid #ccc; border-top: none;">{{ 'R$ ' . number_format($conta->valor, 2, ',', '.') }}</td>
                    <td style="border: 1px solid #ccc; border-top: none;">{{ \Carbon\Carbon::parse($conta->vencimento)->tz('America/Sao_Paulo')->format('d/m/Y') }}</td>
                </tr>
            @empty
                <tr>
                    <td colspan="4">Nenhuma conta encontrada!</td>
                </tr>
            @endforelse
        </tbody>

    </table>
</body>

</html>

Finalizada a implementação para gerar PDF de todos os registros recuperados do banco de dados, mas como gerar PDF do resultado da pesquisa? É necessário alterar o botão 'Gerar PDF' da VIEW 'resources/views/contas/index.blade.php', enviando os dados utilizados na pesquisa.

<a href="{{ url('gerar-pdf-conta?' . request()->getQueryString()) }}" class="btn btn-warning btn-sm">Gerar PDF</a>

Também na CONTROLLER, no método 'gerarPDF', é realizada a pesquisa no banco de dados.

// Gerar PDF
public function gerarPdf(Request $request){

    // Recuperar os registros do banco dados
    //$contas = Conta::orderByDesc('created_at')->get();

    // Recuperar e pesquisar os registros do banco dados
    $contas = Conta::when($request->has('nome'), function ($whenQuery) use ($request){
        $whenQuery->where('nome', 'like', '%' . $request->nome . '%');
    })
    ->when($request->filled('data_inicio'), function ($whenQuery) use ($request){
        $whenQuery->where('vencimento', '>=', \Carbon\Carbon::parse($request->data_inicio)->format('Y-m-d'));
    })
    ->when($request->filled('data_fim'), function ($whenQuery) use ($request){
        $whenQuery->where('vencimento', '<=', \Carbon\Carbon::parse($request->data_fim)->format('Y-m-d'));
    })
    ->orderByDesc('created_at')
    ->get();

    // Carregar a string com o HTML/conteúdo e determinar a orientação e o tamanho do arquivo
    $pdf = PDF::loadView('contas.gerar-pdf', ['contas' => $contas])->setPaper('a4', 'portrait');

    // Fazer o download do arquivo
    return $pdf->download('listar_contas.pdf');    
}

Baixar o código-fonte completo do projeto.

Bom, era isso. Espero que o tutorial tenha sido útil!