首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OctoberCMS DynamicPDF通过AJAX打开或下载

OctoberCMS DynamicPDF通过AJAX打开或下载
EN

Stack Overflow用户
提问于 2019-04-19 05:14:36
回答 1查看 1.2K关注 0票数 1

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

代码语言:javascript
复制
<a href="<?= url('/'); ?>/regency-brochure" class="btn btn-primary" target="_blank">Preview Brochure</a>

现在,我正试图通过AJAX响应打开/下载相同的文件,从而达到同样的目的。因此,我在我的update.htm文件中放置了下面的代码。

代码语言:javascript
复制
<button
                        type="submit"
                        
                        data-request="onPreview"
                        data-load-indicator="Loading Preview"
                        class="btn btn-primary">Preview Brochure Ajax
                    </button>

在我的控制器里我做了这个。

代码语言:javascript
复制
public function onPreview()
    {        
     return PDF::loadTemplate('renatio::invoice')->download('download.pdf');
    }

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

我看过图书馆的文件,他们给我提示说.

技巧:通过Ajax响应下载PDF OctoberCMS ajax框架无法处理这种类型的响应。 推荐的方法是在本地保存PDF文件并将其重定向到PDF文件。

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

有人能指点我怎么解决这个问题吗?如何使用AJAX打开/下载PDF文件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-19 11:49:31

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

这就是我所做的。

update.htm

代码语言:javascript
复制
 <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

代码语言:javascript
复制
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方法中,我使用了save方法而不是download方法,在DynamicPDF文档中提到了PDF::loadTemplate($templateCode)->setPaper('a4', 'landscape')->save($pdf_file_name_directory);,通过它,我将文件保存在特定的位置,并且一旦我能够保存文件。

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

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55756920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档