我有一个FDPF功能,可以为网站的各个部分创建标准PDF。它只需要一些数据,创建一个多页PDF并返回PDF对象,例如。
function pdfBuild($orderData) {
class PDF extends FPDF
{
// Page header
function Header()
{
// Logo
$this->Image('logo.png',10,6,30);
// Arial bold 15
$this->SetFont('Arial','B',15);
// Move to the right
$this->Cell(80);
// Title
//$this->Cell(80,10,'Game Sheet',1,0,'C');
// Line break
$this->Ln(20);
}
// Page footer
function Footer()
{
// Position at 1.5 cm from bottom
$this->SetY(-15);
// Arial italic 8
$this->SetFont('Arial','I',8);
// Page number
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->SetFont('Times','',12);
for($a=0;$a<count($orderData);$a++) {
$pdf->AddPage();
//Add stuff to PDF
}
return $pdf;
}
我的问题出现在一个循环中,通过电子邮件将单个PDF发送给客户端,例如
function buildPDFs() {
//Get a location
$query = "GET SOME CLIENT INFORMATION";
$result = getSQLConnection($query);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
//Get some info from dB using $row
//Format info from db into $data variable
$pdf = pdfBuild($data);
//Test Data
$to = 'stackoverflow@question.com';
$from = 'hello@clientinfo.com';
$subject = 'PDFs'
$message = 'Howdy';
//End
emailPDF($pdf, $to, $from, $subject, $message);
}
}
echo 'Done';
}
问题在于,如果我对循环执行两次迭代,则附件是在第一个实例中生成的PDF,但是我收到两封具有相同附件的电子邮件。因此,看起来$ pdf对象永远不会在循环中发生变化,即使我确定每次传递给PDF生成函数的数据都不同。生成的PDF文件完全相同。
我是否需要每次在循环中取消设置或以其他方式“销毁”PDF对象?
更新
删除页眉和页脚的类定义,如上面的代码片段所示,解决了这个问题。但我无法理解为什么。
问题:为什么删除“类扩展”代码可以解决问题并允许循环每次都按预期生成不同的PDF并正确发送电子邮件?
从Veve回答以下问题并解决问题。我错误地宣布并完全滥用了课程
答案 0 :(得分:1)
为什么删除'class extend'代码可以解决问题 允许循环每次生成不同的PDF,如预期的那样 给他们发正确的电子邮件?
这是因为你混合了一个函数的声明和一个类。
要解决此问题,请首先使用扩展类创建 pdf.php ,这只会覆盖所需的方法:
require_once('fpdf.php');
class PDF extends FPDF
{
// Page header
function Header()
{
// Logo
$this->Image('logo.png',10,6,30);
// Arial bold 15
$this->SetFont('Arial','B',15);
// Move to the right
$this->Cell(80);
// Title
//$this->Cell(80,10,'Game Sheet',1,0,'C');
// Line break
$this->Ln(20);
}
// Page footer
function Footer()
{
// Position at 1.5 cm from bottom
$this->SetY(-15);
// Arial italic 8
$this->SetFont('Arial','I',8);
// Page number
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}
之后,在 code.php 中,您可以使用此类,以及用于在其自己的函数中生成PDF的代码:
require_once('pdf.php');
function pdfBuild($orderData) {
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->SetFont('Times','',12);
for($a=0;$a<count($orderData);$a++) {
$pdf->AddPage();
//Add stuff to PDF
}
return $pdf;
}
function buildPDFs() {
//Get a location
$query = "GET SOME CLIENT INFORMATION";
$result = getSQLConnection($query);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
//Get some info from dB using $row
//Format info from db into $data variable
$pdf = pdfBuild($data);
//Test Data
$to = 'stackoverflow@question.com';
$from = 'hello@clientinfo.com';
$subject = 'PDFs'
$message = 'Howdy';
//End
emailPDF($pdf, $to, $from, $subject, $message);
}
}
echo 'Done';
}