FPDF:使用AJAX输出PDF

时间:2019-06-11 19:49:06

标签: javascript php ajax fpdf

我有一个PHP文件,其中使用FPDF生成PDF文件。如果我执行该文件,它将在浏览器中生成并加载pdf文件。但是,当我尝试使用按钮并使用AJAX生成PDF文件时,此方法将无效。

我正在使用AJAX,因为在生成PDF文件之前,我需要向PHP发布一些变量以在数据库中进行查询。

我在互联网上寻找解决方案,但我仍然不知道该如何实现。

我想在浏览器中加载pdf,而不要下载

PHP:

$pdf->Output('name.pdf','I');

AJAX:

var IDDocument = 15;
var Document = 'Invoice';
var ClientID = '205160615';

    $.ajax({  
                type: 'POST', 
                url: 'PDF.php',  
                data: { IDDocument:IDDocument, 
                        Document:Document,  
                        ClientID:ClientID, 
                        btnPDF:'btnPDF'},
                success: function(data) {
                    //load PDF on browser.
                }
            });

            return false;

3 个答案:

答案 0 :(得分:1)

这就是我最终要做的:

我决定使用JQuery对这样的PHP文件进行POST:

function f()
    {
        //Variables I needed to POST to PHP

        var IDDocument = 15;
        var Document = 'Invoice';
        var ClientID = '205160615';

        //POST to PHP using JQUERY

        $.post('PDF.php'{
                         IDDocument:IDDocument, 
                         Document:Document,
                         ClientID:ClientID,
                         btnPDF:"btnPDF"//btnPDF is just to check if user clicked the button
                         }, 

                         function() //this function is to call the PHP File a second time
                         {
                            window.open('PDF.php');
                         });

    }

然后,在确保用户使用$_SESSION条件单击按钮之后,我决定在PHP文件中存储在if变量中发送的变量。然后,第二次调用PHP文件,因为用户没有单击按钮,所以这次我检查是否使用else创建并加载PDF文件。由于我之前已将变量存储在$_SESSION变量中,因此我只使用它们来加载PDF文件,然后取消设置它们。

这是PHP文件中的代码:

if(isset($_POST['btnPDF'])) //Check if user clicked the button
{
   //If the user clicked the button, store the variables in $_SESSION variables         

    $_SESSION["IDDocument"]=$_POST['IDDocument'];
    $_SESSION["Document"]=$_POST['Document'];
    $_SESSION["ClientID"]=$_POST['ClientID'];
}
else
{
   //the second time the PHP file is called, the user didn't clicked the button.
   //This second time I use the $_SESSION variables previously stored in the first
   //call to the PHP file in order to create and load the PDF file

    //asign $_SESSION variables to PHP variables if you want to

    $IDDocument=$_SESSION["IDDocument"];
    $Document=$_SESSION["Document"]; 
    $ClientID=$_SESSION["ClientID"];

    //unset the $_SESSION variables

    unset($_SESSION["IDDocument"],$_SESSION["Document"],$_SESSION["ClientID"]);

    //Create and load the PDF file
}

答案 1 :(得分:0)

您可以(成功)将浏览器重定向到生成的pdf文件。可以通过ajax响应获取网址。

示例:

$.ajax({  
    type: 'POST', 
    url: 'PDF.php',  
    data: { IDDocumento:IDDocumento, 
            TipoDocumento:TipoDocumento,  
            CedulaCliente:CedulaCliente, 
            btnPDF:'btnPDF'
    },
    success: function(data) {
        // redirect to the generated pdf file
        window.location = data.url;
    }
});

PDF文件的URL必须在服务器端(在PHP中)生成。

<?php
// pdf.php

// Generate PDF here
// ...

// Generate url
// Use an UUID to make sure that nobody can guess the url
$url = 'filename-with-uuid.pdf';

// Send json response
header('Content-Type: application/json');
echo json_encode(['url' => $url]);

答案 2 :(得分:0)

这就是我最终要做的事情:

$.post(ajaxurl,data,function(html, response){
      $(responsediv).html(html)
}

然后在php端,我简单地回显了iframe,并将url指向pdf文件集

$_SESSION['data']=$_POST['data']
echo <iframe src=pdf.php style="width:100%;height:100vh"

,最后进入pdf.php

我有pdf生成代码

$pdf->Output('name.pdf',I);