Evilnapsis

Programming, Hacking and More

PHP Stuffs

Formato de Factura Básica con FPDF y PHP

Este formato de factura cuenta con las características fundamentales, nombre de la empresa, nombre del cliente, datos de la factura, datos de lo productos, etc.

El formato esta en PHP y es personalizable modificando el código fuente, los valores están en arrays y las posiciones de las tablas se calculan dependiendo el tamaño de los arrays.

Es necesario contar con la librería FPDF que sirve para generar los documentos PDF. Pagina de FPDF . Al final se ofrece un enlace de descarga que incluye el código de ejemplo y la librería FPDF.

Este formato de factura esta en tamaño carta original.

Codigo

A continuación el código del ejemplo, ya tiene los comentarios para poder modificar cada sección.

<?php
/// Powered by Evilnapsis go to http://evilnapsis.com
include "fpdf/fpdf.php";
$pdf = new FPDF($orientation='P',$unit='mm');
$pdf->AddPage();
$pdf->SetFont('Arial','B',20);
$textypos = 5;
$pdf->setY(12);
$pdf->setX(10);
// Agregamos los datos de la empresa
$pdf->Cell(5,$textypos,"NOMBRE DE LA EMPRESA");
$pdf->SetFont('Arial','B',10);
$pdf->setY(30);$pdf->setX(10);
$pdf->Cell(5,$textypos,"DE:");
$pdf->SetFont('Arial','',10);
$pdf->setY(35);$pdf->setX(10);
$pdf->Cell(5,$textypos,"Nombre de la empresa");
$pdf->setY(40);$pdf->setX(10);
$pdf->Cell(5,$textypos,"Direccion de la empresa");
$pdf->setY(45);$pdf->setX(10);
$pdf->Cell(5,$textypos,"Telefono de la empresa");
$pdf->setY(50);$pdf->setX(10);
$pdf->Cell(5,$textypos,"Email de la empresa");
// Agregamos los datos del cliente
$pdf->SetFont('Arial','B',10);
$pdf->setY(30);$pdf->setX(75);
$pdf->Cell(5,$textypos,"PARA:");
$pdf->SetFont('Arial','',10);
$pdf->setY(35);$pdf->setX(75);
$pdf->Cell(5,$textypos,"Nombre del cliente");
$pdf->setY(40);$pdf->setX(75);
$pdf->Cell(5,$textypos,"Direccion del cliente");
$pdf->setY(45);$pdf->setX(75);
$pdf->Cell(5,$textypos,"Telefono del cliente");
$pdf->setY(50);$pdf->setX(75);
$pdf->Cell(5,$textypos,"Email del cliente");
// Agregamos los datos del cliente
$pdf->SetFont('Arial','B',10);
$pdf->setY(30);$pdf->setX(135);
$pdf->Cell(5,$textypos,"FACTURA #12345");
$pdf->SetFont('Arial','',10);
$pdf->setY(35);$pdf->setX(135);
$pdf->Cell(5,$textypos,"Fecha: 11/DIC/2019");
$pdf->setY(40);$pdf->setX(135);
$pdf->Cell(5,$textypos,"Vencimiento: 11/ENE/2020");
$pdf->setY(45);$pdf->setX(135);
$pdf->Cell(5,$textypos,"");
$pdf->setY(50);$pdf->setX(135);
$pdf->Cell(5,$textypos,"");
/// Apartir de aqui empezamos con la tabla de productos
$pdf->setY(60);$pdf->setX(135);
$pdf->Ln();
/////////////////////////////
//// Array de Cabecera
$header = array("Cod.", "Descripcion","Cant.","Precio","Total");
//// Arrar de Productos
$products = array(
array("0010", "Producto 1",2,120,0),
array("0024", "Producto 2",5,80,0),
array("0001", "Producto 3",1,40,0),
array("0001", "Producto 3",5,80,0),
array("0001", "Producto 3",4,30,0),
array("0001", "Producto 3",7,80,0),
);
// Column widths
$w = array(20, 95, 20, 25, 25);
// Header
for($i=0;$i<count($header);$i++)
$pdf->Cell($w[$i],7,$header[$i],1,0,'C');
$pdf->Ln();
// Data
$total = 0;
foreach($products as $row)
{
$pdf->Cell($w[0],6,$row[0],1);
$pdf->Cell($w[1],6,$row[1],1);
$pdf->Cell($w[2],6,number_format($row[2]),'1',0,'R');
$pdf->Cell($w[3],6,"$ ".number_format($row[3],2,".",","),'1',0,'R');
$pdf->Cell($w[4],6,"$ ".number_format($row[3]*$row[2],2,".",","),'1',0,'R');
$pdf->Ln();
$total+=$row[3]*$row[2];
}
/////////////////////////////
//// Apartir de aqui esta la tabla con los subtotales y totales
$yposdinamic = 60 + (count($products)*10);
$pdf->setY($yposdinamic);
$pdf->setX(235);
$pdf->Ln();
/////////////////////////////
$header = array("", "");
$data2 = array(
array("Subtotal",$total),
array("Descuento", 0),
array("Impuesto", 0),
array("Total", $total),
);
// Column widths
$w2 = array(40, 40);
// Header
$pdf->Ln();
// Data
foreach($data2 as $row)
{
$pdf->setX(115);
$pdf->Cell($w2[0],6,$row[0],1);
$pdf->Cell($w2[1],6,"$ ".number_format($row[1], 2, ".",","),'1',0,'R');
$pdf->Ln();
}
/////////////////////////////
$yposdinamic += (count($data2)*10);
$pdf->SetFont('Arial','B',10);
$pdf->setY($yposdinamic);
$pdf->setX(10);
$pdf->Cell(5,$textypos,"TERMINOS Y CONDICIONES");
$pdf->SetFont('Arial','',10);
$pdf->setY($yposdinamic+10);
$pdf->setX(10);
$pdf->Cell(5,$textypos,"El cliente se compromete a pagar la factura.");
$pdf->setY($yposdinamic+20);
$pdf->setX(10);
$pdf->Cell(5,$textypos,"Powered by Evilnapsis");
$pdf->output();
view raw invoice.php hosted with ❤ by GitHub

De la linea 11 a la 24 están los datos de la empresa: nombre, dirección, teléfono e email.

De la linea 26 a la 38 están los datos del cliente: nombre, dirección, teléfono e email.

De la linea 40 a la 52 están los datos de la factura: numero de factura, fecha de creación, fecha de vencimiento.

De la linea 54 a la 88 se crea la tabla de productos, en la linea 59 se definen los nombres de la cabecera de la tabla y la linea 61 se definen los datos de los productos, todo en arrays.

Nota: Los subtotales de cada linea se calculan multiplicando cantidad por precio, estos datos se suman para dar en valor total de la factura.

En la linea 90 a la 118 se definen los datos de subtotales, descuento, impuesto y total.

De la linea 119 a la 136 se finalizan con los términos y condiciones.

Resultado

Este es el resultado al ejecutar el código en el navegador (Es necesario usar Xampp o similar).

Descarga

A continuación les dejo el enlace de descarga del ejemplo y la librería FPDF incluida.

Link: https://drive.google.com/file/d/1vRCs5eTEhT8QQ77cQsPldmHzrZFjAgf5/view

Recuerden que después de hacer click deben esperar 5 segundos y después click en “Saltar Publicidad” en la esquina superior derecha. Gracias por su apoyo.

No se olviden de comentar, compartir y suscribirse.

Saludos a todos 😀

Agustin Ramos

Desarrollador de Software

One thought on “Formato de Factura Básica con FPDF y PHP

Leave a Reply