Я работаю над 'DomPDF', используя запрос Ajax Post для проекта Laravel. Ниже приведен код AJAX.

       $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });
        $.ajax({
            url:"{{ route('screen.pdfticket') }}",
            method:"POST",
            data:{
                id:$('#screenid').val()
            },
            success:function(data){
                console.log(data);
            }
        });

И ниже код в контроллере.

    $customPaper = array(0,0,216,158);
    $pdf->loadView("screen.ticket" , [ 
        'clinic' => 'clinic name' , 
        'queno' => $screen->que
    ])->setPaper($customPaper, 'landscape');
    return $pdf->download($screen->que .'.pdf');  

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

1
joenpc npcsolution 29 Май 2019 в 08:41

2 ответа

Лучший ответ

Поскольку вы делаете запрос с использованием AJAX, вам нужен способ загрузки ресурса браузером.

Есть способы пойти, но не ограничиваясь следующим:

  • Верните URL ресурса в ответе на запрос AJAX, затем сделайте отдельный запрос браузера для загрузки ресурса.

  • Создайте блоб из ответа ресурса на запрос AJAX, затем загрузите его с URL-адреса блоба.
    Это показано в примере ниже.

function downloadFile(response) {
  var blob = new Blob([response], {type: 'application/pdf'})
  var url = URL.createObjectURL(blob);
  location.assign(url);
} 

$.ajax({
  url: "{{ route('screen.pdfticket') }}",
  method: 'POST',
  data: {
    id: $('#screenid').val()
  }
})
.done(downloadFile);
3
Oluwafemi Sule 29 Май 2019 в 06:40

Используйте stream () для потоковой передачи созданного PDF в браузер и используйте output () для получения правильного формата возврата. См. https://github.com/dompdf/dompdf/wiki/Usage для получения дополнительной информации. Информация.

0
Sjoerd Loeve 29 Май 2019 в 05:56