繁体   English   中英

TCPDF - AJAX - 下载文件而不将其从AJAX调用保存到Web服务器

[英]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');

我也尝试了FDI参数没有成功,文件没有下载。

如何强制下载创建的文件而不将其保存到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM