在php中创建pdf作为字符串,类似于以下内容:
%PDF-1.4
(..skipping...)
/F1 9 Tf
0 g
BT
157 830 Td
(Lorem ) Tj
ET
(..skipping...)
8 0 obj
<</Type /Font /Encoding /WinAnsiEncoding /Subtype /Type1 /BaseFont /Helvetica >>
endobj
我的php代码:
//string it's pdf as plain text
return new Response($string);
在js中,我使用ajax:
$("a#get_pdf").on('click', function(e){
e.preventDefault();
$.ajax('/get_pdf/');
});
我如何下载这个文件,因为我的回复是纯文本,不喜欢一个文件。
-----编辑-----
我可以这样做,就像这样回答:https://stackoverflow.com/a/34065784/4900669
-----编辑2-
但经过一番搜索,我编辑了js代码(https://stackoverflow.com/a/20830337/4900669):
$("a#get_pdf").on('click', function(e){
e.preventDefault();
$.ajax({
url: '/get_pdf/',
type: 'POST',
success: function() {
window.location = '/get_pdf/';
}
});
});
它的工作非常完美。
首先,我认为您不需要将其作为ajax,只需让浏览器在一个空白窗口中打开链接即可。
然后你需要修复你的头,使下载成为可能,参考:Symfony2-强制文件下载
这应该足以让它发挥作用!我希望它能帮助
Javascript被明确禁止写入文件。您不能将Ajax调用与文件下载结合起来。
您可以在当前文档中嵌入一个隐藏的iframe,然后将该iframe指向内容,这将导致在浏览器中触发下载。例如
$("a#get_pdf").on('click', function(e){
e.preventDefault();
document.getElementById('someHiddenDiv').innerHTML="<iframe src='/get_pdf/'></iframe>";
}
但是,您至少需要在包含pdf文件的响应的标头中设置mimetype。