FPDF:使用 AJAX 输出 PDF
FPDF: Output PDF using AJAX
我有一个 PHP 文件,我在其中使用 FPDF 生成 PDF 文件。如果我执行该文件,它会在浏览器上生成并加载 pdf 文件。但是,当我尝试使用按钮并使用 AJAX 生成 PDF 文件时,它不起作用。
我正在使用 AJAX,因为我需要 post 一些变量到 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;
您可以将浏览器重定向(成功时)到生成的 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;
}
});
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]);
这就是我最后做的事情:
我决定使用 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');
});
}
然后,在确保用户使用 if
条件单击按钮后,我决定在 PHP 文件中存储发送到 $_SESSION
变量中的变量。然后,第二次调用 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 这边,我简单地用 url 回显和 iframe 到 pdf 文件集
$_SESSION['data']=$_POST['data']
echo <iframe src=pdf.php style="width:100%;height:100vh"
然后终于在 pdf.php
我有pdf生成代码
$pdf->Output('name.pdf',I);
我有一个 PHP 文件,我在其中使用 FPDF 生成 PDF 文件。如果我执行该文件,它会在浏览器上生成并加载 pdf 文件。但是,当我尝试使用按钮并使用 AJAX 生成 PDF 文件时,它不起作用。
我正在使用 AJAX,因为我需要 post 一些变量到 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;
您可以将浏览器重定向(成功时)到生成的 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;
}
});
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]);
这就是我最后做的事情:
我决定使用 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');
});
}
然后,在确保用户使用 if
条件单击按钮后,我决定在 PHP 文件中存储发送到 $_SESSION
变量中的变量。然后,第二次调用 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 这边,我简单地用 url 回显和 iframe 到 pdf 文件集
$_SESSION['data']=$_POST['data']
echo <iframe src=pdf.php style="width:100%;height:100vh"
然后终于在 pdf.php
我有pdf生成代码
$pdf->Output('name.pdf',I);