@Dmitry28PRo

Загрузить файл PDF В БД на Laravel?

Привет кодеры, подскажите пожалуйста, у меня есть форма, после нажатия на кнопку в контроллере формируется PDF файл(так сказать инвойс). и данный файл сразу открывается на новой вкладке. Использовал данную технологию
Если вы посчитаете что библиотека не подходит то можно использовать эту
Что мне надо, мне надо реализовать так что-бы данный файл сохранялся в БД, и после этого я мог на отдельной странице вывести в столбец ид файла, имя пользователя, и кнопки скачать файл, и посмотреть файл в браузере(как это происходит в данном случае когда я нажимаю на кнопку в форме).

Вот контроллер который обрабатываю:
<?php

namespace App\Http\Controllers;

use PDF;
use Illuminate\Http\Request;
class InvoiceController extends Controller
{
    public function index(){
      return view('invoice');
    }
    public function download(Request $request)
    {
        $name = $request->name;

        $products = [
            [
              'title' => 'Product 1',
              'price' => 10.99,
              'quantity' => 1,
              'totals' => 10.99
            ],
            [
              'title' => 'Product 2',
              'price' => 14.99,
              'quantity' => 2,
              'totals' => 29.98
            ],
            [
              'title' => 'Product 3',
              'price' => 500.00,
              'quantity' => 1,
              'totals' => 500.00
            ],
            [
              'title' => 'Product 4',
              'price' => 6.99,
              'quantity' => 3,
              'totals' => 20.97
            ],
        ];

        $total = collect($products)->sum('totals');

        $pdf = PDF::loadView('pdf.invoices', compact('products', 'total', 'name'));

        return $pdf->stream('invoice.pdf');//данный файл открывает в браузере
        //return $pdf->stream('invoice.pdf');//Сохраняет файл на Пк
        $pdf->save();
    }
}

Вот миграция
<?php

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

class CreateInvoiceUsers extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('invoice_users', function (Blueprint $table) {
            $table->id();
            $table->string('name_user');
            $table->string('name_file');
            //data
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('invoice_users');
    }
}

Вот файл инвойса
<!DOCTYPE html>
<html>
<head>
    <title>Invoice Example</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
    <div style="width: 100%; max-width: 960px; margin: auto">
        <table width="100%">
            <tr style="border-bottom: 1px solid #000000">
                <td><h2>Invoice</h2></td>
                <td style="text-align: right"><h3>Order # 12345</h3></td>
            </tr>
            <tr>
                <td style="padding-bottom: 16px;">
                    <strong>Billed To:</strong><br>
                    {{ $name }}<br>
                    1234 Victory Avenue<br>
                    Apt. 5D<br>
                    Sunfield, ST 54321
                </td>
                <td style="text-align: right; padding-bottom: 16px;">
                    <strong>Shipped To:</strong><br>
                    John Smith<br>
                    1234 Victory Avenue<br>
                    Apt. 5D<br>
                    Sunfield, ST 54321
                </td>
            </tr>
            <tr>
                <td>
                    <strong>Payment Method:</strong><br>
                        Visa ending **** 4242<br>
                        jsmith@email.com
                </td>
                <td style="text-align: right">
                    <strong>Order Date:</strong><br>
                    March 7, 2014<br><br>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <h3>Order summary</h3>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <table width="100%" cellpadding="0" cellspacing="0" border="1">
                        <thead>
                            <tr style="background-color: #eee">
                                <th style="text-align: left; padding: 5px 10px;">Item</th>
                                <th style="text-align: center; padding: 5px 10px;">Price</strong></th>
                                <th style="text-align: center; padding: 5px 10px;">Quantity</th>
                                <th style="text-align: right; padding: 5px 10px;">Totals</th>
                            </tr>
                        </thead>
                        <tbody>
                            @foreach ($products as $product)
                                <tr>
                                    <td style="text-align: left; padding: 5px 10px;">{{ $product['title'] }}</td>
                                    <td style="text-align: center; padding: 5px 10px;">{{ $product['price'] }}</td>
                                    <td style="text-align: center; padding: 5px 10px;">{{ $product['quantity'] }}</td>
                                    <td style="text-align: right; padding: 5px 10px;">{{ $product['totals'] }}</td>
                                </tr>
                            @endforeach
                            <tr>
                                <td colspan="2"></td>
                                <td style="text-align: center; padding: 5px 10px;"><strong>Totals</strong></td>
                                <td style="text-align: right; padding: 5px 10px;">{{ $total }}</td>
                            </tr>
                        </tbody>
                    </table>
                </td>
            </tr>
        </table>
    </div>
</body>
</html>
  • Вопрос задан
  • 438 просмотров
Решения вопроса 1
@kandrash
Кратко о себе
Вам не нужно сохранять pdf в БД. Это не имеет смысла. Достаточно хранить данные из которых он генерируется и потом делать это на лету. В крайнем случае, если ожидается 100500 скачиваний можете сохранить его в storage. Наверняка ваша библиотека это позволяет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы