Laravel snappy推PDF下载

时间:2016-07-04 09:21:05

标签: javascript php ajax laravel pdf-generation

我正在使用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函数背后的原因是我使用带有表单的模态来收集人员数据,然后才能启动下载。这有ajax验证。

1 个答案:

答案 0 :(得分:2)

您将无法通过JavaScript将文件作为常规下载呈现。为了向用户显示下载提示,您需要在工作流程中添加一个额外步骤。

我建议采用以下工作流程:

  1. 用户提交模式表单
  2. 表格通过AJAX验证。如果验证通过,请使用URL回复以下载用户的PDF,而不是PDF本身。
  3. 您的JavaScript会将用户重定向到此网址。请注意,这是一个重定向,而不是另一个AJAX请求(请参阅top.location.href
  4. 当用户访问该URL时,您可以使用原始问题中提供的代码段来传递PDF。此代码段会相应地设置响应的content-disposition,从而强制下载提示显示在用户的浏览器中。
  5. 如果您需要为每个用户自定义PDF生成,请务必在步骤4中包含用户ID(或其他标识信息)。