laravel-admin で PDFサンプル出力。そしてGrid一覧画面の右端メニューをアイコンに設定変更 config/admin.php grid_action_class

DEVELOP

laravel-dompdfライブラリでPDFサンプル出力

参考サイトはこちら

【Laravel】laravel-dompdfライブラリでPDFを出力するやり方を解説します
こんにちは。たいら(@tairaengineer2)です。転職を繰り返し現在4社経験している、10年目エンジニアです。この記事では、LaravelでPDFを出力する基本のやり方を解説していきます。前提条件:実行環境について実行環境は以下の通

laravel-dompdfライブラリ のインストール

cd 対象のlaravelフォルダへ移動し、
composer require barryvdh/laravel-dompdf

次に、

composer.json"barryvdh/laravel-dompdfが入っていることが確認

    "require": {
・・・
        "barryvdh/laravel-dompdf": "^2.0",
・・・

設定する

config/app.php に以下を追加する

'providers' => [
・・・
    Barryvdh\DomPDF\ServiceProvider::class,
・・・
],

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

日本語を表示するための設定

以下よりフォントをダウンロードする

IPAex フォント Ver.004.01 | 一般社団法人 文字情報技術促進協議会

strage 配下に fonts ディレクトリの作成し、ダウンロードしたフォントを配置

laravel実装

app>Admin>Controllers>SampleController.php

<?php

namespace App\Admin\Controllers;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Show;
use App\Models\User;

use PDF;

class SampleController extends AdminController
{
    public function pdf_sample()
    {
        $pdf = PDF::loadView('pdf_sample');
        return $pdf->download('pdf_sample.pdf');
        // return $pdf->stream('pdf_file.pdf');
        
    }
}

app>routes.php でルーティングの設定

<?php

use Illuminate\Routing\Router;

Admin::routes();

Route::group([
    'prefix'        => config('admin.route.prefix'),
    'namespace'     => config('admin.route.namespace'),
    'middleware'    => config('admin.route.middleware'),
    'as'            => config('admin.route.prefix') . '.',
], function (Router $router) {

    $router->get('/', 'HomeController@index')->name('home');
    $router->get('/pdf/dl/{customer_id}', 'PdfController@index')->name('pdf.dl');
    $router->get('/pdf/view/{customer_id}', 'PdfController@view')->name('pdf.view');
    $router->resource('users', UserController::class);
    $router->resource('blogs', BlogController::class);
    $router->resource('authors', AuthorController::class);
    $router->resource('books', BookController::class);

    $router->get('/pdfsample', 'SampleController@pdf_sample')->name('pdf_sample');
});

resource>views>pdf_sample.blade.php ビューの作成

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>title</title>
    </head>
    <body>
        <h1>PDF Sample</h1>
        <p>Hello World</p>
    </body>
</html>

http://localhost/sales/public/admin/pdfsample へアクセスするとpdfダウンロードができました。

Grid(一覧)右端のメニューをアイコンに変更(config/admin.phpのgrid_action_class)

config/admin.phpファイルのgrid_action_classを変更

/*
    |--------------------------------------------------------------------------
    | The global Grid action display class.
    |--------------------------------------------------------------------------
    */
    //'grid_action_class' => \Encore\Admin\Grid\Displayers\DropdownActions::class,
    'grid_action_class' => \Encore\Admin\Grid\Displayers\Actions::class,

app>Admin>Controllers>BookController.php の Grid に以下を追加

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        $grid = new Grid(new Book());

        $grid->quickSearch('title');

        $grid->column('id', __('Id'));
        $grid->column('title', __('Title'));
        $grid->column('author_id', __('Author id'));

        // リレーション
        $grid->column('author.first_name', __('Author FirstName'));
        $grid->column('author.last_name', __('Author LastName'));

        $grid->column('page', __('Page'));
        $grid->column('subtitle', __('Subtitle'));
        $grid->column('price', __('Price'));
        $grid->column('created_at', __('Created at'));
        $grid->column('updated_at', __('Updated at'));
        //「操作」列にボタンの追加
        $grid->actions(function ($actions) {
            //form等のURLを指定する。
            //   $actions->prepend('<a href="./pdfsample'.$actions->getKey().'/edit"><button type="button" class="btn btn-primary btn-xs">PDF</button></a></br>');
              $actions->prepend('<a href="./pdfsample"><button type="button" class="btn btn-primary btn-xs">PDF</button></a></br>');
          });
  
        return $grid;
    }

アイコンが表示されるようになり、PDFボタンが追加できました。

ちなみに、デフォルトは、

次は、

  • データベースからのデータをPDF出力

タイトルとURLをコピーしました