Как открыть сгенерированный pdf (с laravel snappy) в новой вкладке с помощью ajax - PullRequest
1 голос
/ 03 июня 2019

Я использую AJAX для возврата HTML, который мой контроллер laravel преобразует в pdf (из-за некоторых вычислений, выполненных js).Затем мне нужно открыть сгенерированный PDF в новой вкладке, после сохранения его в моей папке.Я не хочу использовать хранилище / общую папку.поскольку в каталоге хранилища находятся другие личные папки, я сохраняю их. Поэтому я не смог получить их ссылку с помощью laravel.

В моем контроллере у меня есть:

    $pdf = PDF::loadHTML($pdf_html)->setPaper('A4')->setOption('header-html', $header)->save($filepath.$filename);

    $headers = [
        'Content-Type' => 'application/pdf',
        'Content-Disposition' => 'inline',
    ];

    return Response::make(file_get_contents($filepath.$filename), 200, $headers);

Мои js:

    $.ajax({
        method: "POST",
        url: '/generatepdf',
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        success: function (data) {
        console.log(data);
                    /*What to do here?*/ 
        }

Я получил: DOMException: Failed to execute 'open' on 'Window': Unable to open a window with invalid URL Заранее спасибо.

1 Ответ

0 голосов
/ 03 июня 2019

Не возвращайте Response в вашей функции, вместо этого верните имя файла сохраненного PDF-файла (включите имя папки, если оно является исключительным для этого PDF-файла).
Затем откройте этот URL с помощью обратного вызова Ajax.

success: function(data){
    window.open('pdf/'+data, '_blank');
}

Поскольку вы сохраняете PDF-файл в папке хранилища, вам потребуется маршрут и обработчик.

Route::get('pdf/{filename}', 'SomeController@getPdf');

В вашем контроллере:

public function getPDF($filename){
    (maybe add some code to check if user is authorized)
    return response()->download(storage_path('path-to-pdf-folder'.$filename), null, [], null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...