【问题标题】:How to open generated pdf (with laravel snappy) in new tab using ajax如何使用ajax在新选项卡中打开生成的pdf(使用laravel snappy)
【发布时间】:2019-10-18 21:20:21
【问题描述】:

我正在使用 AJAX 返回我的 laravel 控制器转换为 pdf 的 html(因为 js 完成了一些计算)。 然后,将生成的 pdf 保存在我的文件夹中后,我需要在新选项卡中打开它。 我不想使用 storage/public 文件夹。因为存储目录下还有其他私人文件夹,我正在保存。所以我无法获得他们与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?*/ 
        }

我得到: 提前致谢。

【问题讨论】:

    标签: ajax laravel pdf


    【解决方案1】:

    不要在您的函数中返回响应,而是返回保存的 pdf 的文件名(如果文件夹名是此 pdf 独有的,则包括文件夹名称)。
    然后使用 Ajax 回调打开该 url。

    success: function(data){
        window.open('pdf/'+data, '_blank');
    }
    

    因为您将 PDF 保存在 storage 文件夹中,所以您需要一个路由和一个处理程序。

    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);
    }
    

    【讨论】:

    • 感谢您提供此解决方案。在通过 ajax 发送所有 html 之前,您能否帮助了解要在页面上显示的图像?我不知道如何使它们显示出来。提前致谢
    • 我有一些图片要显示在页面上。图像也必须显示在生成的 pdf 上。但它们在私人文件夹中。我需要在我的 php 页面上显示它们,然后获取 dom 并通过 ajax 发送。现在生成了 pdf,但图像尚未显示
    猜你喜欢
    • 2015-07-27
    • 2019-03-18
    • 2012-12-05
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    相关资源
    最近更新 更多