Reputation: 161
I have a PHP file where I generate a PDF file using FPDF. If I execute that file, it generates and loads the pdf file on browser. However when I try to generate the PDF file using a button and by using AJAX it does not work.
I am using AJAX since I need to post some variables to PHP to make a query in the database before generating the PDF file.
I looked for solutions on internet but I still do not know how to achieve this.
I want to load the pdf on browser, not download it
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;
Upvotes: 2
Views: 4327
Reputation: 396
here's what i ended up doing:
$.post(ajaxurl,data,function(html, response){
$(responsediv).html(html)
}
then on php side i simply echo'd back and iframe with the url to the pdf file set
$_SESSION['data']=$_POST['data']
echo <iframe src=pdf.php style="width:100%;height:100vh"
and then finally in the pdf.php
i have the pdf generation code
$pdf->Output('name.pdf',I);
Upvotes: 0
Reputation: 161
This is what I ended up doing:
I decided to use JQuery to make a POST to a PHP file like this:
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');
});
}
Then, in the PHP File I decided to store the variables sent in $_SESSION
variables after making sure the user clicked the button by using an if
condition. And then, the second time the PHP file is called, as the user did not clicked the button I checked that using an else
in oder to create and load the PDF file this time. Since I have the variables previously stored in $_SESSION
variables, I just used them to load the PDF file and then I unset them.
this is the code in the PHP file:
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
}
Upvotes: 1
Reputation: 4952
You may redirect the browser (on success) to the generated pdf file. The url could be fetch via the ajax response.
Example:
$.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;
}
});
The URL for the PDF file must be generated on the server side (in 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]);
Upvotes: 0