DomPDF不会在Laravel上下载AJAX请求的文件

时间:2019-05-29 05:41:33

标签: laravel dompdf

我正在使用Laravel项目上的Ajax Post请求来处理'DomPDF'。下面是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');  

我可以得到正确的答复,但它不是可读的格式。我想用ajax代替成功后以pdf格式保存。任何建议或指导将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:2)

由于您是使用AJAX发出请求的,因此需要一种使浏览器加载资源的方法。

有很多方法可以走,但不限于以下方法:

  • 在对AJAX请求的响应中返回资源URL,然后发出单独的浏览器请求以加载资源。

  • 对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);

答案 1 :(得分:0)

使用stream()将创建的PDF流式传输到浏览器,并使用output()获得正确的返回格式。有关更多信息,请参见https://github.com/dompdf/dompdf/wiki/Usage