Как скачать pdf, сгенерированный в laravel, из vuejs? - PullRequest
0 голосов
/ 13 января 2020

У меня есть следующая функция в laravel для генерации PDF

public function download_agreement(Request $request){
        try{
           /*  $items = DB::table("items")->get();
                    view()->share('items',$items); */
            if ($request->has('download')) {
            $pdf = PDF::loadView('pdf.agency.agreement');
            return $pdf->download('pdfview.pdf');
        }
        $pdf = PDF::loadView('pdf.agency.agreement');
        return view('pdfview');
        }
        catch(\Exception $error){
            Log::error('[RegistrantsController] error in send_agreement ' . $error);
            return response()->json(['code' => 403, 'message' => 'Something went wrong']);
        }
    }

И затем я делаю следующее:

downloadAgreement() {
      console.log("DOWNLOAD");
      let sendData = {
        uuid: this.$route.params.uuid,
        email: "email@gmail.com",
        download: true
      };
     axios
    .post(config.routePrefix + "/agency/download_agreement", sendData)
    .then(response => {
      console.log(response);
      const url = window.URL.createObjectURL(new Blob([response.data]));
      console.log(url);
      const link = document.createElement("a");
      link.href = url;
      link.setAttribute("download", "file.pdf");
      document.body.appendChild(link);
      link.click();
    })
    .catch(error => {
      console.log(error);
    });
}

Я сгенерировал PDF и удалось скачать его. У меня проблема в том, что он показывает мне пустой PDF. В моем файле .blade:

@extends('pdf.layout')
@section('style')
<style>
    .agreement-text {
        margin-left: 7%;
        margin-right: 7%;
    }
    .sign-line{
      align-self: center;
      width: 60%;
      border-bottom: 1px solid black;
    }
    .ql-align-justify{
        text-align: justify;
    }
    .ql-align-center{
        text-align: center;
    }
    .header-line{
        border: none;
        height: 3px;
        color: #a1d138 ;
        background-color: #a1d138 ;
    }
</style>
@stop
@section('content')
    <header>
        {{-- <img style="width: 30%;" src="{{ config('arm.arm_app.email_pdf_logo') }}"> --}}
        <hr class="header-line">
    </header>

    <div class="agreement-text">
        TEST TEST TEST TEST
    </div>


    <div class="img-div">
        {{-- <img class="img-center" src="{{$sign}}"> --}}
    </div>

    <div class="img-div">
        <hr class="sign-line">
        Nombre
    </div>
@stop

В данный момент я не отправляю никаких данных, я просто хочу с легкостью сгенерировать pdf с текстом

1 Ответ

0 голосов
/ 13 января 2020

Если предположить, что $pdf->download уже возвращает правильные заголовки, самое простое решение - отобразить ссылку на этот URL-адрес для пользователя, по которому он может щелкнуть. Просто откройте его в новой вкладке, если на странице может быть несохраненный контент, например, форма.

Вы также можете открыть всплывающее окно, используя JS. Насколько я знаю, все браузеры будут отображать запрос на сохранение, а затем закрывать вкладку.

...