【问题标题】:OctoberCMS DynamicPDF open or download via AJAXOctoberCMS DynamicPDF 通过 AJAX 打开或下载
【发布时间】:2019-09-09 10:25:00
【问题描述】:

我正在使用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 文件?

【问题讨论】:

    标签: php octobercms octobercms-plugins octobercms-backend dynamicpdf


    【解决方案1】:

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

    这就是我所做的。

    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)-&gt;setPaper('a4', 'landscape')-&gt;save($pdf_file_name_directory); 通过它,我将文件保存在特定位置,一旦我可以保存文件。

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2012-12-03
      • 2016-07-08
      • 2016-06-03
      相关资源
      最近更新 更多