我正在使用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文件?
答案 0 :(得分:0)
最终,我实现了上述功能。
这就是我所做的。
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
方法,而不是Documentation of DynamicPDF中提到的download
方法,PDF::loadTemplate($templateCode)->setPaper('a4', 'landscape')->save($pdf_file_name_directory);
,我将文件保存在特定位置,并且一旦能够保存文件。
然后我使用formSuccess
从 update.htm 文件中的window.open(data.result, '_blank');
方法打开。
希望这会有所帮助。