我正在使用AJAX返回laravel控制器转换为pdf的html(由于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?*/
}
答案 0 :(得分:0)
不要在您的函数中返回Response,而是返回已保存的pdf的文件名(如果此pdf专有,则包括文件夹名称)。
然后使用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);
}