【问题标题】:TCPDF - AJAX - Download file without saving it to webserver from AJAX callTCPDF - AJAX - 从 AJAX 调用下载文件而不将其保存到网络服务器
【发布时间】:2016-02-18 11:14:26
【问题描述】:

我有一个对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 参数但没有成功,文件没有下载。

如何强制下载创建的文件而不将其保存到网络服务器并且不将用户重定向到任何其他页面?我希望他留在同一页面上,并且浏览器会弹出 PDF 的(下载或预览对话框)。有什么办法吗?

编辑:create_pdf.php 正在等待 POST 变量。并使用它们为 pdf 创建 HMTL。

【问题讨论】:

    标签: php jquery ajax pdf tcpdf


    【解决方案1】:

    您可以尝试将表单提交到新窗口(如弹出窗口):

    <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 调用,没有提交任何表单。我只是从当前页面获取我需要的所有信息并将它们发送到 create_pdf.php
    • 您可以创建一个可以在按下按钮时提交的动态表单。
    • 像这样创建输入:var fields = $("&lt;input&gt;", {name: 'var1', type: 'text'}); $( "&lt;form&gt;", {target : '__foo', method : "post"} ).append( fields).submit();
    • 请查看此页面:link。它主要恢复到我之前的评论。
    • 忘了说你必须在按钮点击回调中添加表单创建代码。
    【解决方案2】:

    我找到了解决问题的方法。

    我在另一个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);
    
    
    
                        },
    
                      });
    

    【讨论】:

      【解决方案3】:

      将此答案用于我的类似请求:send a csv file from php to browser

      我需要 (1) 在另一个窗口中获取并显示一个 pdf;和 (2) 获取CSV文件并提示保存。

      我在页面上有 2 个简单的按钮 (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 文件已经存储在那里并且刚刚被检索。也许您可以根据自己的目的修改代码。

      【讨论】:

        猜你喜欢
        • 2019-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-05
        • 2012-10-08
        • 1970-01-01
        相关资源
        最近更新 更多