[英]TCPDF - AJAX - Download file without saving it to webserver from AJAX call
我有一个对create_pdf.php
页面的AJAX调用:
$('body').on('click', '.PrintButtonWithClass', function (event) {
var1 = $('#id1').val();
var2 = $('#id2').val();
dataString='var1='+var1+'&var2='+var2+'&pdf_name=PdfName&pdf_creator=myname';
$.ajax({
type: 'post',
url: '/path/to/createpdf/file/create_pdf.php',
data: dataString,
success: function (data) {
alert('success');
}
});
});
在create_pdf.php
我尝试使用此行下载文件:
$pdf->Output(str_replace(' ','_',utf8_decode($_POST['pdf_name'])).'.pdf', 'D');
我也尝试了FD
和I
参数没有成功,文件没有下载。
如何强制下载创建的文件而不将其保存到Web服务器并且不将用户重定向到任何其他页面? 我希望他留在同一页面上,浏览器弹出PDF的下载或预览对话框。 有什么办法吗?
编辑:create_pdf.php正在等待POST变量。 并使用它们为pdf创建HMTL。
您可以尝试将表单提交到新窗口(如弹出窗口):
<form method="post" id="myform" action="your_url">
<input name="param1">
</form>
并在JavaScript中
// create popup window
var wind = window.open('about:blank', '__foo', 'width=700,height=500,status=yes,resizable=yes,scrollbars=yes');
// submit form to popup window
$("#myform").attr("target", "__foo");
不要忘记从php发送内容类型标题:
header("Content-Type", "application/pdf");
编辑:浏览器应显示您的pdf内容,并显示下载或打印选项。 代码未经过测试,但我认为它会按照您的要求进行测试;
我找到了解决问题的方法。
我做了一个AJAX
内另一个呼叫AJAX
调用。
第一个AJAX
调用在webServer上创建文件,并在新窗口中打开该文件。
在他的成功参数中,我执行以下操作:
从服务器删除文件的第二个AJAX
调用。
$.ajax({
type: 'post',
url: '/path/to/create_pdf.php',
data: dataString,
success: function (data) {
window.open(
data,
'_blank' // <- This is what makes it open in a new window.
);
window.setTimeout(function () {
dataString2 = 'Downloaded=true';
$.ajax({
type: 'post',
url: '/path/to/create_pdf.php',
data: dataString2,
success: function (data) { alert(data); }, // handler if second request succeeds
});
}, 5000);
},
});
使用这个答案我的类似请求: 从php发送一个csv文件到浏览器
我需要(1)在另一个窗口中获取并显示pdf; (2)获取CSV文件并提示保存。
我在页面上有两个简单的按钮( http://potoococha.net/ )。 这是代码:
function getCSVText(evt) {
if (currentChecklistCountry) {
var form = $('<form method="post" action="../php/sendCSV.php?country=' + currentChecklistCountry + '"></form>');
$('body').append(form);
form.submit();
form.remove();
}
else checklistCountryButton.classList.add("needsAttention");
}
function openChecklistPage() {
if (!currentChecklistCountry) {
checklistCountryButton.innerHTML = "Select Country";
checklistCountryButton.classList.add("needsAttention");
return;
}
if (gNumDays == undefined) gNumDays = 12;
vars = "?country=" + currentChecklistCountry;
vars += "&num_days=" + gNumDays;
vars += "&line_nos=" + lineNumbers.checked;
vars += "&left_check=" + leftCheck.checked;
vars += "&endemics=" + showEndemics.checked;
vars += "&sci_names=" + !sciNames.checked;
vars += "&italics=" + !italics.checked;
window.open( '../php/makePDF.php' + vars, '_blank' );
}
因此getCSVText()方法使用附加的临时表单下载文件,然后立即删除,openChecklistPage()成功打开另一个带有pdf文件的浏览器窗口。 pdf文件永远不会保存在服务器上。 CSV文件已存储在那里并刚刚检索。 也许您可以为您的目的修改代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.