Просмотр pdf-потока в браузере

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

PHP:

$fdata = file_get_contents($tmppdf);
header("Content-type: application/pdf");
header("Content-disposition: inline; filename=".$tmppdf);
return $fdata;

Аякс:

$('body').on('click', '.printInvoice', function () {
     var purchase_id = $(this).data("id");
     // window.location.href = "/purchases/print" + '/' + purchase_id;
     window.open('/purchases/print' + '/' + purchase_id, '_blank');
});

В результате я получаю двоичное содержимое. Может кто-нибудь помочь, что не так с моим кодом.

введите здесь описание изображения

ОБНОВЛЕНИЕ: мой код ajax изменен на приведенный ниже, и теперь я получаю пустую страницу в формате PDF.

$('body').on('click', '.printInvoice', function () {
   var purchase_id = $(this).data("id");
   $.ajax({
     type: "GET",
     url: "/purchases/print" + '/' + purchase_id,
     success: function (data) {
        var blob = new Blob([data], {type: 'application/pdf'});
        var blobURL = window.URL.createObjectURL(blob);
        window.open(blobURL,'_blank');
        },
     error: function (data) {
        alert("Unable to Print !!!");
        }
});

person Zaheer Ahmed    schedule 14.06.2019    source источник
comment
Вы возвращаете этот php-код из функции контроллера?   -  person Jerodev    schedule 14.06.2019
comment
да, это контроллер laravel 5.8   -  person Zaheer Ahmed    schedule 14.06.2019


Ответы (2)


Возможно:

return Response::make($fdata, 200, [
    'Content-Type' => 'application/pdf',
    'Content-Disposition' => 'inline; filename="'.$tmppdf.'"'
]);
person James    schedule 14.06.2019
comment
Можете ли вы помочь, как я могу преобразовать его в вызов Ajax Success. Как упоминалось в обновлении моего вопроса; Я попытался поставить window.open(data,'_blank'); в разделе «Успех», но в этом случае я получаю пустую страницу. - person Zaheer Ahmed; 15.06.2019

На самом деле Laravel имеет встроенную функциональность для возврата файловых ответов. Это автоматически установит правильные заголовки, чтобы файл отображался в браузере.

return response()->file($tmppdf);
person Jerodev    schedule 14.06.2019
comment
Это работает, но не решает мою проблему, потому что загружается из файла, и я не могу удалить файл. Я хочу загрузить содержимое файла в переменную и удалить файл. - person Zaheer Ahmed; 14.06.2019
comment
Почему бы вам сначала не сохранить ответ response()->file($tmppdf), затем удалить файл, а затем вернуть уже сохраненный ответ? например $fileResponse = response()->file($tmppdf); /* code to delete file goes here */ return $fileResponse; - person James; 14.06.2019