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

时间:2016-02-18 11:14:27

标签: php jquery ajax pdf tcpdf

我对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。

3 个答案:

答案 0 :(得分:0)

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

<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内容,并显示下载或打印选项。 代码未经过测试,但我认为它会按照您的要求进行测试;

答案 1 :(得分:0)

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

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



                    },

                  });

答案 2 :(得分:0)

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

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

我在页面上有两个简单的按钮(http://potoococha.net/)。这是代码:

.sub1 { font-size: 20px; color: blue; }
.sub2 { font-size: 50px; color: green; }
.....
.sub1000 { font-size: 100px; color: brown; }

因此getCSVText()方法使用附加的临时表单下载文件,然后立即删除,openChecklistPage()成功打开另一个带有pdf文件的浏览器窗口。 pdf文件永远不会保存在服务器上。 CSV文件已存储在那里并刚刚检索。也许您可以为您的目的修改代码。