OctoberCMS DynamicPDF открыть или скачать через AJAX - PullRequest
0 голосов
/ 19 апреля 2019

Я использую 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');
    }

Теперь, как только я нажимаю на него, мой браузер зависает, но я могу видеть некоторую произвольную длинную строку в моем ответе.

Я проверил и прочитал библиотекудокументацию, и они дают подсказку о том, что ...

Совет: скачать PDF через ответ Ajax

OctoberCMS ajax framework не может обработать этот тип ответа.

РекомендуетсяПодход заключается в локальном сохранении файла PDF и возврате перенаправления в файл PDF.

И я попытался открыть / загрузить, используя return, но он не работает.

Может кто-нибудь подсказать мне, как я могу решить эту проблему?Как я могу сделать мой PDF-файл открытым / загруженным с помощью AJAX здесь?

1 Ответ

0 голосов
/ 19 апреля 2019

В конце концов, я реализовал вышеупомянутую функцию.

Вот что я сделал.

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)".

Тогда onPreviewDownload метод в моем ControllerFile, я использовал save метод вместо download метода, PDF::loadTemplate($templateCode)->setPaper('a4', 'landscape')->save($pdf_file_name_directory);, упомянутого в Документация по DynamicPDF , с помощью которого ясохранение файла в определенном месте, и как только я смогу сохранить файл.

Затем я открываю из моего метода formSuccess в update.htm файл, используя window.open(data.result, '_blank');.

Надеюсь, это поможет.

...