1

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

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

现在我试图通过 AJAX 响应打开/下载相同的文件来做同样的事情。因此,我在我的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');
    }

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

我已经检查并阅读了图书馆的文档,他们给出了一个提示说......

提示:通过 Ajax 响应下载 PDF

OctoberCMS ajax 框架无法处理这种类型的响应。

推荐的方法是在本地保存 PDF 文件并返回重定向到 PDF 文件。

我试图通过使用打开/下载,return但它不起作用。

有人可以指导我如何解决这个问题吗?如何在此处使用 AJAX 打开/下载我的 PDF 文件?

4

1 回答 1

1

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

这是我所做的。

更新.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>

控制器文件.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)".

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

然后我使用update.htm文件从我的formSuccess方法打开。window.open(data.result, '_blank');

希望这可以帮助。

于 2019-04-19T11:49:31.060 回答