У меня есть файл PHP, в котором я создаю файл PDF с помощью FPDF. Если я выполняю этот файл, он генерирует и загружает файл PDF в браузер. Однако, когда я пытаюсь создать файл PDF с помощью кнопки и с помощью AJAX, он не работает.
Я использую AJAX, так как мне нужно опубликовать некоторые переменные в PHP, чтобы сделать запрос в базе данных перед созданием файла PDF.
Я искал решения в Интернете, но я до сих пор не знаю, как этого добиться.
Я хочу загрузить pdf в браузер, а не скачать
PHP:
$pdf->Output('name.pdf','I');
АЯКС:
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;
Это не работает



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете перенаправить браузер (в случае успеха) на сгенерированный файл 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]);
Но как мне получить URL-адрес созданного PDF-файла?
URL-адрес должен быть сгенерирован на стороне сервера (в PHP).
Вот что я в итоге сделал:
Я решил использовать 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
}
вот что я в итоге сделал:
$.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);
Будет ли PDF-файл загружаться браузером автоматически, практически во всех случаях зависит от пользователя. Если вы используете опцию вывода
stringfPDF ($ourpdf->Output('S')), вы можете установить заголовки и отправить вместе с PDF-файлом.