2011-01-09 21 views
1

Ich habe ein Problem beim Erstellen von Tabellen mit fpdf.Wie erstellt man FPDF-Tabellen?

Kann mir jemand helfen, diese Seite zu erstellen (oder mir zumindest sagen, wie es geht)?

Oder können Sie zeigen, wie HTML-Tabellen zu FPDF Tabellen konvertieren und den Code hier setzen?

Ich habe dies auch (zusammen mit der Verbindung zur Datenbank):

$person = mysql_fetch_array($result); 

Ich möchte dies, wenn in den Tabellen mit diesem = (Beispiel)

$pdf->Cell(0,260,''.$person["CA"],'C',0 ,1); --- .$person["CA"] 

hinzugefügt funktionieren jemand mir helfen?

+0

Was ist das spezifische Problem, das Sie haben? – deceze

+0

ich kann nicht scheinen, um die Tabellen zu machen ... wie zum Beispiel, wenn ich das Tutorial von fpdf folgen sie zeigen Text extrahiert aus countries.txt ... aber ich möchte den Text von $ _POST Funktion..ich habe dies http://puertoricohoops.net/invoicestimate/pdf/pdf8.php - und der Text in den Tabellen wird aus einer TXT-Datei extrahiert, aber ich möchte diese Punkte mit meiner $ _POST-Funktion gefüllt .. THNX für die Unterstützung – NORM

Antwort

6

Nun, FPDF funktioniert irgendwie wie eine Schreibmaschine, in dem es einen X, Y Punkt hat, in den es schreibt, den Sie manuell bewegen können oder es für Sie tun lassen.

Ich weiß nicht, ob das große Leerzeichen auf der linken Seite erforderlich ist. In diesem Fall müssten Sie vor jedem Schreibvorgang $ this-> SetX ($ coordinate) aufrufen.

Sie sollten etwas tun:

class InvoicePDF extends FPDF //Create a new class to contain the header/footer/etc. which extends FPDF 
{ 
    public function Header 
    { 
    //Header stuff goes here, like the big Invoice 
     $this->SetY(10); //SetY 10 units down from the top, experiment with distance to get appropriate distance 
     $this->SetFont('Arial','',20); //Set Font to Arial/Helvetica 20 pt font 
     $this->SetTextColor(0,0,0); //Set Text Color to Black; 
     $this->Cell(0,9,"INVOICE",0,0,'R'); //Write the word INVOICE Right aligned in a box the width of the page, will put it at the far right of the page 
    } 

    public function Footer 
    { 
     //any footer stuff goes here 
    } 

    public function FillHeadInfo($info) //$info would be an array of the stuff to fill the small table at the top 
    { 
      $this->SetY(0); //reset the Y to the original, since we moved it down to write INVOICE 
      $this->SetFont('Arial','',12); 
      $this->SetFillColor(224,224,224); //Set background of the cell to be that grey color 
      $this->Cell(20,12,"Order #",1,0,'C',true); //Write a cell 20 wide, 12 high, filled and bordered, with Order # centered inside, last argument 'true' tells it to fill the cell with the color specified 
      $this->Cell(20,12,"Coding",1,0,'C',true); 
      $this->Cell(20,12,"Sales Code",1,1,'C',true); //the 1 before the 'C' instead of 0 in previous lines tells it to move down by the height of the cell after writing this 

      $this->Cell(20,12,$info['ordernum'],1,0,'C'); 
      $this->Cell(20,12,$info['coding'],1,0,'C'); 
      $this->Cell(20,12,$info['salescode'],1,1,'C'); 

      $this->Cell(40,12,"Name & Address",1,0,'C',true); 
      $this->Cell(20,12,"Date",1,1,'C',true); 
      $y = this->GetY(); //Need the current Y value to reset it after the next line, as multicell automatically moves down after write 
      $x = this->GetX(); // Might need the X too 
      $this->MultiCell(40,12,$info['customername'] . "\n" . $info['address'] . "\n" . $info['city'] . ', ' . $info['state'] . ' ' . $info['zip'],1,'L',false); //I assume the customer address info is broken up into multiple different pieces 
      $this->SetY($y); //Reset the write point 
      $this->SetX($x + 40); //Move X to $x + width of last cell 

      $this->Cell(20,36,date("format",strtotime($info['date'])),1,1,'C'); //Might be easier to use $this->Rect() to draw rectangles for address and date and then write the address and date into them without borders using SetX and SetY, if the borders don't line up or whatever 

    } 

    public function fillItems($items) 
    { 
      //You'd build the items list much the same way as above, using a foreach loop or whatever 
      //Could also easily combine this function and the one above 
    } 
} 

Dann, wenn die PDF-Erstellung Sie so etwas tun würde:

require_once('fpdf.php'); 
require_once('class.invoicepdf.php'); 
//Get whatever info you need to fill the pdf 
$pdf = new InvoicePDF('P','mm','Letter'); 
$pdf->AddPage(); 
$pdf->FillHeadInfo($info); //Could also pass $_POST and rely on the keys of the $_POST array 
$pdf->FillItems($items); 
$pdf->Output('filename.pdf','I'); 

By the way, würde ich vorschlagen, anstatt zu versuchen, Um es aus $ _POST zu schreiben, speichern Sie die Bestellung in der DB, dann übergeben Sie die Bestell-ID zusammen mit dem Skript, um die PDF über einen Link und $ _GET zu schreiben, und lassen Sie das Skript die Informationen aus der DB abrufen, so können Sie Wählen Sie nur die Informationen aus, die Sie benötigen.

+0

Thnx für die Antwort . Hast du den Code ausprobiert? PHP gibt diesen Fehler: Parse-Fehler: Syntaxfehler, unerwartete '{', erwartet '(' (unter der öffentlichen Funktion Header) - auch verstehe ich nicht die Liste der Build-Elemente, sage ich, in meinem Fall,. $ person ["CA "] = Adresse ?? – NORM

+0

wurden bekomme ich diese Datei: class.invoicepdf.php ??? – NORM

+0

gibt es diesen Fehler: Parse-Fehler: Syntaxfehler, unerwartete T_OBJECT_OPERATOR .. auf den Zeilen waren dies: $ y = this- > GetY (0); und $ x = this -> GetX (0); .. wenn ich sie eliminiere, bekomme ich diese verzerrt: http://puertoricohoops.net/invoicestimate/pdf/pdf9.php - wenn du ein Beispiel für Ihren Code in einem Link wäre es nett .. danke! – NORM