Erstellen Sie Mehrere PDF-Dateien von FPDF
Was ich versuche zu tun, ist erstellen und per E-Mail mehrere PDF-Dateien mittels FPDF. Ich habe bereits alles nach E-Mail eine einzelne Datei, aber wenn ich versuchen zu kleben, und alles in eine Schleife, das Skript endet die Ausgabe nur die erste Instanz der PDF-Datei wird dann beendet, um einen leeren Bildschirm. diese läuft perfekt, wenn ich bin nur mit der Verarbeitung eines Datensatzes, jedoch, wenn Sie hinzufügen, mehrere, es läuft nur ein einziges mal. Ich kann wirklich nicht herausfinden, was zu tun ist hier ist mein code. Jede Hilfe oder Richtung, wird sehr geschätzt.
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
}
}
Hier ist der Kern meiner pdf-Generierung von code, die die Besonderheiten der generation ausgelassen.
<?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('');
}
}
}
?>
InformationsquelleAutor Jared Meyering | 2013-02-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein Ansatz ist richtig, aber Sie müssen möglicherweise neu zu strukturieren Ihre Logik.
In jeder der Dateien, die Sie beinhalten, würden Sie wollen Funktionen schreiben, um die Arbeit der Erzeugung der PDF-Datei und senden Sie die E-Mail. Dann die Schleife kann wiederholt werden, um so auszusehen:
So, in Ihren Dateien, die Sie implementieren müssen, um die Logik für die vorgeschlagenen
generate_pdf_for_client
undsend_email_to_client
Funktionen.$pdf->Output($savepath,'F')
gar nicht wirklich wissen, was Sie ausgegeben, wenn der $pdf-Instanz wird nicht angelegt in der tatsächlichen vorherigen code? Wenn ich Ort, den code innerhalb der Funktion es wird der Prozess der ersten ledger noch, aber nicht verschieben auf die nächsten Einträge. Ich fange an zu denken, seine ein Problem mit$pdf
ich habe versucht, entfernen Sie die Instanz, bevor Sie fortfahren mit der Schleife, aber noch kein Glück.Ohne zu sehen, was Ihre PDF-generator macht, ist es schwer zu sagen, was Los ist. Die Kernaussage der Vorschlag in der Antwort Kapseln die funktionalen Zuständigkeiten der einzelnen Aufgaben. Sie könnten möglicherweise zurückkehren, das PDF-Objekt aus Ihrer generate_pdf nennen, eher als re-verwenden Sie eine einzige Instanz jedes mal. Scheint, wie das ist, was Sie tun.
Ich habe meine pdf-generator Informationen, Ihrer meist styling Funktionen der fpdf-Klasse
Hat Ihre PDF-Erzeugung-code eine gültige
$clientid
?Ja tut es. Ich hatte eine Idee, zu Hause werde ich testen wenn ich mich wieder an die Arbeit morgen. Ich werde einfach versuchen, die Ausgabe zwei einfache fpdf Dokumente zurück und sehen, ob ein Problem mit fpdf selbst oder mein code...
InformationsquelleAutor Ryan