Hello Everyone ! Welcome to the second part of this tutorial series ‘Generating Invoice Using FPDF in PHP and MySQL’. For a quick reminder about what we have accomplished till now , please go through the below list
- Creation of database ‘test’ and table ‘products’ in mysql databse.
- Creation of products display page.
- Created a ‘model.php’ file to fetch data from the database.
- Addition of ‘ADD TO CART’ functionality to each product.
Now proceeding further with the generation of Invoice from the cart products data.
As per our last tutorial we were able to store our cart data in a session
variable called $_SESSION['cart']
. So we will utilize this data here.
First of all lets add a anchor link after the ul
closing tag.
<?php if(isset($_SESSION['cart']) && !empty($_SESSION['cart'])){ ?> <a href="generate_invoice.php" target="_blank" style="text-decoration:none;text-align:center;line-height:40px;color:#fff;width:200px;height:40px;background:green;display:block;margin:auto;">Generate Invoice</a> <?php } ?>
That’s done, and we now proceed with creating the ‘generate_invoice.php’ file in our working directory.Once the file is created write the below lines in it.
<?php session_start(); ?>
Now its time to download our FPDF library
in our working directory.You can download this library from here. Once the library is downloaded, extract the files in a new folder and name it as fpdf
. Now copy the fpdf
folder in your working directory.
After this, create a new php file called invoice.php
in your project root directory and add the below lines.
<?php require('fpdf/fpdf.php'); class Invoice extends FPDF{ function Header(){ $this->SetFont('Arial','B',24); $this->Cell(60); $this->Cell(60,10,'XYZ ENTERPRISES'); $this->Ln(10); $this->Line(0,20,$this->GetPageWidth(),20); $this->Ln(10); $this->SetFont('Arial','B',14); $this->Cell(70); $this->Cell(60,10,'PURCHASE ORDER',1,1,'C',true); $this->Image('ENTER URL TO YOUR LOGO HERE',95,45,20); $this->Ln(10); } function add_from($str){ $this->SetFont('Arial','',10); $this->setXY(10,50); $this->Cell(70,7,'From',1,2,'L',true); $this->MultiCell(70,8,$str,'LRB',1); } function add_to($str){ $x = $this->GetX(); $this->setXY($x+120,50); $this->Cell(60,7,'To',1,2,'L',true); $y = $this->GetY(); $this->MultiCell(60,8,$str,'LRB',1); $this->Ln(10); } function add_order_detail($rdate,$cur){ $this->Cell(50); $x=$this->GetX(); $y=$this->GetY(); $this->setXY($x,$y); $this->Cell(50,7,'Order date',1,2,'L',true); $this->Cell(50,8,$rdate,'LRB',1); $this->setXY($x+50,$y); $this->Cell(40,7,'Currency',1,2,'L',true); $this->Cell(40,8,$cur,'LRB',1); $this->Ln(10); } function populate_table($data){ $x=$this->GetX(); $y=$this->GetY(); $this->setXY($x,$y); $this->Cell(20,7,'S.No.',1,2,'L',true); $this->setXY($x+20,$y); $this->Cell(50,7,'Product name',1,2,'L',true); $this->setXY($x+70,$y); $this->Cell(30,7,'Company',1,2,'L',true); $this->setXY($x+100,$y); $this->Cell(20,7,'Qty.',1,2,'L',true); $this->setXY($x+120,$y); $this->Cell(30,7,'Unit Price',1,2,'L',true); $this->setXY($x+150,$y); $this->Cell(30,7,'Total Price',1,2,'L',true); $i=1; $total=0; foreach($data as $d){ $price = $d["price"]*$d["quantity"]; $this->Ln(0); $x=$this->GetX(); $y=$this->GetY(); $this->setXY($x,$y); $this->Cell(20,7,$i,1,2,'L'); $this->setXY($x+20,$y); $this->Cell(50,7,$d["name"],1,2,'L'); $this->setXY($x+70,$y); $this->Cell(30,7,$d["company"],1,2,'L'); $this->setXY($x+100,$y); $this->Cell(20,7,$d["quantity"],1,2,'L'); $this->setXY($x+120,$y); $this->Cell(30,7,$d["price"],1,2,'L'); $this->setXY($x+150,$y); $this->Cell(30,7,$price,1,2,'L'); $total += $price; $i++; } $this->Ln(0); $x=$this->GetX(); $y=$this->GetY(); $this->setXY($x+120,$y); $this->Cell(30,7,'Grand Total',1,2,'C',true); $this->setXY($x+150,$y); $this->Cell(30,7,round($total,2),1,2,'L'); } function Footer() { $this->SetY(-15); $this->SetFont('Arial','I',8); $this->Cell(0,10,'Copyright 2018 XYZ Enterprises. All Rights Reserved.',0,0,'C'); } } ?>
OMG 🙂 ! That’s huge right ! But basically if you go through it line by line you will be able to get an idea of what I am trying to do over here.However , if you face any difficulty ,I would suggest you to go through the documentation of the fpdf library, and for any assistance related to the codes here you are free to comment below.
Now lets proceed further and import this invoice class
in our ‘generate_invoice.php’ file.
<?php session_start(); require('invoice.php'); $data =$_SESSION['cart']; $pdf = new Invoice(); $pdf->SetFillColor(214,214,214); $pdf->AddPage(); $pdf->add_from("XYZ Enterprises\nabc street,PO 8976\nTel:9876567891"); $pdf->add_to("ABC Enterprises\ndef street,PO 8975\nTel:9876567756"); $pdf->add_order_detail(date(),'USD'); $pdf->populate_table($data); $pdf->Output(); ?>
Now finally, lets have a look of what we have achieved.Please click here to view the generated invoice.
That’s it ! We are done with this part and also with this tutorial series.Hope you enjoyed it ! Please comment your view.