フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

LaravelでPDF生成する

インストール

  • 下記のパッケージはHTMLをPDFに変換するライブラリです。 github.com
composer require barryvdh/laravel-dompdf

設定ファイル

  • パッケージのインストール後、config /app.phpにサービスプロバイダーとエイリアスを追加します。
'providers' => [
    
    Barryvdh\DomPDF\ServiceProvider::class,
],

'aliases' => [
    
    'PDF' => Barryvdh\DomPDF\Facade::class,
],

ルーティングの設定

Route::get('/pdf', [PdfController::class, 'index'])->name('pdfs.index');

コントローラー

  • このパスapp \ Http \ Controllers \ PdfController.phpに新しいコントローラーを作成し、以下のコマンドをコピーします。
  • PDF::loadViewに指定したViewで出力された内容がPDFになる
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use PDF;

class PdfController extends Controller
{
    public function index(Request $request){
        $user = User::latest()->paginate(5);
        if($request->has('download'))
        {
            $pdf = PDF::loadView('pdfs.index',compact('user'));
            return $pdf->download('pdfview.pdf');
        }
        return view('pdfs.index',compact('user'));
    }
}

View

@extends('layouts.app')

<div class="container">
    <div class="row">
      <div class="col-lg-12" style="margin-top: 15px ">
        <div class="pull-right">
          <a class="btn btn-primary" href="{{route('pdfs.index',['download'=>'pdf'])}}">Download PDF</a>
        </div>
      </div>
    </div><br>

    <table class="table table-bordered">
      <tr>
        <th>Name</th>
        <th>Email</th>
      </tr>

      @foreach ($user as $user)
      <tr>
        <td>{{ $user->name }}</td>
        <td>{{ $user->email }}</td>
      </tr>
      @endforeach
    </table>
  </div>

実行結果

- 右がブラウザの画面で左が生成されたPDFファイルとなります。 f:id:PX-WING:20201103213941p:plain