FPDF: вывод PDF с использованием AJAX - PullRequest
1 голос
/ 11 июня 2019

У меня есть PHP-файл, в котором я генерирую PDF-файл, используя FPDF.Если я выполняю этот файл, он генерирует и загружает файл PDF в браузере.Однако, когда я пытаюсь сгенерировать файл PDF с помощью кнопки и с помощью AJAX, он не работает.

Я использую AJAX, поскольку мне нужно опубликовать некоторые переменные в PHP, чтобы выполнить запрос в базе данных, прежде чем генерироватьPDF-файл.

Я искал решения в интернете, но до сих пор не знаю, как этого добиться.

Я хочу загрузить 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;

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Это то, что я в итоге сделал:

Я решил использовать JQuery для создания POST-файла PHP следующим образом:

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');
                         });

    }

Затем в файле PHP я решилчтобы сохранить переменные, отправленные в $_SESSION переменных после того, как пользователь удостоверился, что нажал кнопку, используя условие 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
}
0 голосов
/ 11 июня 2019

Вы можете перенаправить браузер (в случае успеха) на созданный файл PDF.URL-адрес может быть получен с помощью ответа 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;
    }
});

URL-адрес файла PDF должен быть создан на стороне сервера (в 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]);
...