OctoberCMS DynamicPDF 打开或下载通过 AJAX

OctoberCMS DynamicPDF open or download via AJAX

我正在使用 DynamicPDF 并且我在新选项卡中打开我的文件以生成我的文件,它工作得非常好。这是我到目前为止所拥有的(在我的一个插件的 update.htm 文件中)。

<a href="<?= url('/'); ?>/regency-brochure" class="btn btn-primary" target="_blank">Preview Brochure</a>

现在我正试图通过 AJAX 响应以某种方式通过 opening/downloading 相同的文件做同样的事情。因此,我在 update.htm 文件中放入了以下代码。

<button
                        type="submit"
                        
                        data-request="onPreview"
                        data-load-indicator="Loading Preview"
                        class="btn btn-primary">Preview Brochure Ajax
                    </button>

在我的控制器中我已经完成了这个。

public function onPreview()
    {        
     return PDF::loadTemplate('renatio::invoice')->download('download.pdf');
    }

现在,只要我点击它,我的浏览器就会挂起,但我能够在我的响应中看到一些随机的二进制长字符串。

我已经检查并阅读了图书馆的文档,他们给出的提示是……

Tip: Download PDF via Ajax response

OctoberCMS ajax framework cannot handle this type of response.

Recommended approach is to save PDF file locally and return redirect to PDF file.

我尝试使用 return 打开/下载但它不起作用。

谁能指导我如何解决这个问题?如何在此处使用 AJAX 打开/下载我的 PDF 文件?

最终,我实现了上述功能。

这是我所做的。

update.htm

 <button type="submit" data-request="onPreviewDownload" data-load-indicator="Generating Brochure..."
                            data-request-success="formSuccess( context, data, textStatus, jqXHR)" class="btn btn-primary">Preview Brochure
                        </button>

<script>
    function formSuccess( context, data, textStatus, jqXHR){        
        window.open(data.result, '_blank');        
    }    
</script>

ControllerFile.php

public function onPreviewDownload()
    {


        $templateCode = 'renatio::invoice'; // unique code of the template
        $storagePath =  storage_path('app/uploads/');
        $pdf_file_name =  'regency-brochure-test.pdf' ;
        $pdf_file_name_directory =  $storagePath . $pdf_file_name;
        PDF::loadTemplate($templateCode)->setPaper('a4', 'landscape')->save($pdf_file_name_directory);
        return $baseUrl = url(Config::get('cms.storage.uploads.path')) . '/' . $pdf_file_name;

    }

正如您在 update.htm 文件中看到的,我使用了 data-request="onPreviewDownload"data-load-indicator="Generating Brochure..."data-request-success="formSuccess( context, data, textStatus, jqXHR)"

然后我的ControllerFile中的onPreviewDownload方法,我用的是save方法而不是download方法,Documentation of DynamicPDF中提到的PDF::loadTemplate($templateCode)->setPaper('a4', 'landscape')->save($pdf_file_name_directory);通过它,我将文件保存在特定位置,一旦我能够保存文件。

然后我使用 window.open(data.result, '_blank');.

update.htm 文件中的 formSuccess 方法打开

希望这对您有所帮助。