1
我想要做的是使用FPDF创建并通过电子邮件发送多个PDF文件。我已经有一切工作可以通过电子邮件发送单个文件,但是当我尝试将所有内容粘贴到循环中时,脚本最终只输出PDF的第一个实例,然后退出到空白屏幕。当我只处理一条记录时,它会完美运行,但是当您添加多条记录时,它只会运行一次。我真的不知道在这里做什么是我的代码。任何帮助或方向表示赞赏。从FPDF创建多个PDF文件
while ($data = mysql_fetch_row($query)) // under normal circumstances working properly
{
$clientid = $data['0'];
if($clientid)
{
require("generatepdf.php"); //styles the pdf and is working properly
$savepath = 'c:/ledgers/'.$cname.' Cash Ledger.pdf';
$pdf->Output($savepath,'F');
require("ledgeremail.php"); //runs query to get email address and emails the outputted file
}
}
这是我的pdf生成代码的要点,遗漏的一代的具体细节。
<?php
require("includes/pdf/fpdf.php");
{
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','',16);
//Run Query to get Ledger information for the $clientid variable
//Pass information from query into the different variables throughout script
//Print Document Title
$pdf->Cell(0,10,$cname.' Petty Cash Ledger', 0,1,'L');
//Print First Month Grouping
$pdf->SetFont('Arial','',10);
$pdf->Line($linestart,$pdf->GetY(),$lineend,$pdf->GetY());
$pdf->Cell(10,5,$startmonth.", ".$startyear, 0,0,'L');
$pdf->SetX(175);
$pdf->SetFont('','B');
$pdf->Cell(20,5,'Balance Forward: $'.$balforward, 0,1,'R');
$pdf->SetFont('');
//print group headers
$pdf->SetTextColor(101,102,102);
$pdf->Cell(30,5,'Date',0,0,'L');
$pdf->SetX(30);
$pdf->Cell(105,5,'Description', 0,0,'L');
$pdf->SetX(135);
$pdf->Cell(20,5,'Deposit', 0,0,'R');
$pdf->SetX(155);
$pdf->Cell(20,5,'Withdrawl', 0,0,'R');
$pdf->SetX(175);
$pdf->Cell(20,5,'Balance', 0,1,'R');
$pdf->SetTextColor(0,0,0);
$pdf->SetFillColor(255);
while($ledger = mysql_fetch_row($ledgerqry))
{
if ($grey == 1) $pdf->SetFillColor(225);
$currentmonth = date('F',strtotime($data[0]));
if ($currentmonth != $startmonth)
{
$pdf->SetFillColor(255);
$grey = 0;
$currentyear = date('Y',strtotime($data[0]));
//Print Month End Balance
$pdf->SetX(175);
$pdf->SetFont('','B');
$pdf->Cell(20,5,'Ending Balance: '.$runningbal, 0,1,'R',1);
$pdf->SetFont('');
$pdf->Line($linestart,$pdf->GetY()+2,$lineend,$pdf->GetY()+2);
//Print Month Grouping
$pdf->Cell(10,10,$currentmonth.", ".$currentyear, 0,0,'L');
$pdf->SetX(175);
$pdf->SetFont('','B');
$pdf->Cell(20,10,"Balance Forward: ".$runningbal, 0,1,'R');
$pdf->SetFont('');
//print group headers
$pdf->SetTextColor(101,102,102);
$pdf->Cell(30,5,'Date',0,0,'L');
$pdf->SetX(30);
$pdf->Cell(105,5,'Description', 0,0,'L');
$pdf->SetX(135);
$pdf->Cell(20,5,'Deposit', 0,0,'R');
$pdf->SetX(155);
$pdf->Cell(20,5,'Withdrawl', 0,0,'R');
$pdf->SetX(175);
$pdf->Cell(20,5,'Balance', 0,1,'R');
$pdf->SetTextColor(0,0,0);
$startmonth = $currentmonth;
}
//Create line Variables
$tdate = date('m/d/Y',strtotime($ledger[0]));
$tdescription = $ledger[2];
if($ledger[3]==0) $tdeposit = ""; else $tdeposit = "$".number_format($ledger[3], 2, '.', ',');
if($ledger[4]==0) $twithdrawl = ""; else $twithdrawl = "($".-1*number_format($ledger[4], 2, '.', ',').")";
$runningbal = "$".number_format($balforward + $ledger[5], 2, '.', ',');
$pdf->Cell(30,7,$tdate, 0,0,'L',1);
$pdf->SetX(30);
$pdf->Cell(105,7,$tdescription, 0,0,'L',1);
$pdf->SetX(135);
$pdf->Cell(20,7,$tdeposit, 0,0,'R',1);
$pdf->SetX(155);
$pdf->Cell(20,7,$twithdrawl, 0,0,'R',1);
$pdf->SetX(175);
$pdf->Cell(20,7,$runningbal, 0,1,'R',1);
if ($grey == 1)
{
$pdf->SetFillColor(255);
$grey = 0;
}
else $grey = 1;
}
//Create Final balance
$pdf->SetFillColor(255);
$pdf->SetX(175);
$pdf->SetFont('','B');
$pdf->Cell(20,5,'Ending Balance: '.$runningbal, 0,1,'R',1);
$pdf->SetFont('');
}
}
}
?>
好吧,我创建了这里列出的功能,但是当我运行它们时,它们不会像以前那样输出任何东西。可能'$ pdf->输出($ savepath,'F')'实际上不知道在实际的前面的代码中创建$ pdf实例时没有输出什么?当我将该代码放入函数中时,它将仍然处理第一个分类帐,但不会移动到下一个记录。我开始认为它是'$ pdf'的问题我试图在继续循环之前取消设置实例,但仍然没有运气。 – 2013-02-13 21:57:12
没有看到你的PDF生成器做什么,很难说出发生了什么。答案中的建议的要点是要封装每项任务的职能责任。您可能会从generate_pdf调用中返回PDF对象,而不是每次重新使用一个实例。看起来就像你在做什么。 – Ryan 2013-02-13 22:00:39
我添加了我的pdf生成器信息,其主要是fpdf类的样式函数 – 2013-02-13 22:21:34