DomPDF 没有为 Laravel 上的 AJAX 请求下载文件
DomPDF does not download file for AJAX request on Laravel
我正在 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 格式保存。任何建议或指导将不胜感激,谢谢。
使用 stream() 将创建的 PDF 流式传输到浏览器并使用 output() 获得正确的 return 格式。有关详细信息,请参阅 https://github.com/dompdf/dompdf/wiki/Usage。
由于您使用 AJAX 发出请求,因此您需要一种方法让浏览器加载资源。
方法有但不限于以下:
Return 资源 URL 在对 AJAX 请求的响应中,然后发出单独的浏览器请求来加载资源。
为 AJAX 请求创建一个资源响应的 blob,然后从 blob 的 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);
我正在 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 格式保存。任何建议或指导将不胜感激,谢谢。
使用 stream() 将创建的 PDF 流式传输到浏览器并使用 output() 获得正确的 return 格式。有关详细信息,请参阅 https://github.com/dompdf/dompdf/wiki/Usage。
由于您使用 AJAX 发出请求,因此您需要一种方法让浏览器加载资源。
方法有但不限于以下:
Return 资源 URL 在对 AJAX 请求的响应中,然后发出单独的浏览器请求来加载资源。
为 AJAX 请求创建一个资源响应的 blob,然后从 blob 的 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);