我正在使用Laravel/Jquery与barryvdh/Laravel -snappy创建一个pdf数据库数据。
在控制器中我有:
if ($request->ajax())
{
$document = Document::url($id)->first();
$pdf = PDF::loadView('app.documents.whitepapers.pdf', compact('document'));
return $pdf->download('filename.pdf');
// return response()->send($pdf->download('filename.pdf'), 200, $headers);
}
我如何将这个PDF推送到浏览器,以便可以下载?
当我这样做没有Jquery它是完美的工作。之所以把它放在Jquery函数后面,是因为在开始下载之前,我使用了一个带有表单的Modal来收集个人数据。
您将无法通过JavaScript将该文件作为常规下载呈现。为了向用户显示下载提示,您需要在工作流中添加一个额外步骤。
我建议以下工作流程:
- 用户提交模态表单
- 表单通过AJAX验证。如果验证通过,响应一个URL来下载用户的PDF,而不是PDF本身。 你的JavaScript将用户重定向到这个URL。注意,这是一个重定向,而不是另一个AJAX请求(参见top.location.href)
- 当用户访问该URL时,您可以使用您在原始问题中提供的代码片段交付PDF。这个代码片段适当地设置了响应的
content-disposition
,迫使下载提示出现在用户的浏览器中。
如果您需要为每个用户定制PDF生成,请确保在步骤4中包含用户的ID(或其他标识信息)。