Evilnapsis

Programming, Hacking and More

ExamplesPHP Stuffs

[PHP] Formato de Ticket Básico para impresoras de Tickets con FPDF

Este formato de ticket para impresora de tickets es esencial en sistemas de venta, de entrega, boletos de autobús, entre otras cosas, aquí les dejo el formato que uso para que lo aplique donde gusten.

La librería FPDF sirve para crear documentos PDF en diferentes tamaños, también tiene la opción de crear una hoja PDF con tamaño personalizado.

Link: Pagina de FPDF

Los tickets regularmente están entre los 5 y 10 cms o 50 y 100 mms (milímetros) ya que son las medidas en que imprimen las impresoras de este tipo.

Código

Ahora les dejo el código y se los explico en la parte de abajo.


<?php
include "fpdf/fpdf.php";
$pdf = new FPDF($orientation='P',$unit='mm', array(45,350));
$pdf->AddPage();
$pdf->SetFont('Arial','B',8); //Letra Arial, negrita (Bold), tam. 20
$textypos = 5;
$pdf->setY(2);
$pdf->setX(2);
$pdf->Cell(5,$textypos,"NOMBRE DE LA EMPRESA");
$pdf->SetFont('Arial','',5); //Letra Arial, negrita (Bold), tam. 20
$textypos+=6;
$pdf->setX(2);
$pdf->Cell(5,$textypos,'——————————————————————-');
$textypos+=6;
$pdf->setX(2);
$pdf->Cell(5,$textypos,'CANT. ARTICULO PRECIO TOTAL');
$total =0;
$off = $textypos+6;
$producto = array(
"q"=>1,
"name"=>"Computadora Lenovo i5",
"price"=>100
);
$productos = array($producto, $producto, $producto, $producto, $producto );
foreach($productos as $pro){
$pdf->setX(2);
$pdf->Cell(5,$off,$pro["q"]);
$pdf->setX(6);
$pdf->Cell(35,$off, strtoupper(substr($pro["name"], 0,12)) );
$pdf->setX(20);
$pdf->Cell(11,$off, "$".number_format($pro["price"],2,".",",") ,0,0,"R");
$pdf->setX(32);
$pdf->Cell(11,$off, "$ ".number_format($pro["q"]*$pro["price"],2,".",",") ,0,0,"R");
$total += $pro["q"]*$pro["price"];
$off+=6;
}
$textypos=$off+6;
$pdf->setX(2);
$pdf->Cell(5,$textypos,"TOTAL: " );
$pdf->setX(38);
$pdf->Cell(5,$textypos,"$ ".number_format($total,2,".",","),0,0,"R");
$pdf->setX(2);
$pdf->Cell(5,$textypos+6,'GRACIAS POR TU COMPRA ');
$pdf->output();

view raw

ticket-php1.php

hosted with ❤ by GitHub

En la linea 2 incluimos la librería FPDF, al final les dejo un paquete de descarga con todos los archivos.

En la linea 4, creamos el documento, en este caso es de 45 (milímetros) de ancho y 350 (milímetros) de alto, es decir el ticket es muy largo, esto es así para que el ticket no se corte, si es muy chico se va a cortar y descuadrar, pero si es muy largo, la impresora solo va a imprimir hasta donde este el texto.

En la linea 5 empezamos agregando una pagina.

En la linea 6 configuramos el tamaño de letra para el titulo. Arial es la fuente, B es para letra negritas, 8 es el tamaño del texto.

En la linea 7 definimos la variable “textypos” que sirve para la posición Y del texto, lo que sera la altura, la posición X siempre es la misma.

En la linea 8 asignamos la posicion Y inicial.

En la linea 9 asignamos la posición X inicial.

En la linea 10 agregamos el titulo de la empresa “Nombre de la empresa”, primero parámetro posición x =5 es fijo , segundo parámetro posición Y “textypos” y tercero el texto.

En la linea 14 agrego una linea separadora con puros guiones ‘——————————‘

En la linea 17 agrego una linea de texto para las cabeceras de la tabla donde se muestra la cantidad, precio y total.

En la linea 19 se define una variable total=0, que es el total de la venta, se incrementa en la linea 37, con el total de cada producto por la cantitad, y se muestra al final en la linea 45 con un formato de 2 decimales.

En las lineas 21 a la 26 defino un array con los productos, en este caso es un producto y lo repito 5 veces.

En las lineas 27 a la 39 agrego todos los productos uno por linea, utilizo posiciones X,Y personalizadas para los campos para que se muestren en un orden, también utilizo un limite de texto para el nombre del producto, ya que si el nombre es muy largo entonces se pondrá sobre el precio y perderá formato.

En la linea 50 se muestra el PDF en la salida del navegador.

Resultado

Este es el resultado al ejecutar el script.

Descarga

A continuación el paquete de descarga con la librería FPDF y el código de ejemplo.

Link: https://drive.google.com/open?id=1K7-ou14pZEJvVwsfTy9AeDaZlUeBnPDX

No se olviden de comentar, compartir y suscribirse.

Saludos a todos 😉

Agustin Ramos

Desarrollador de Software

4 thoughts on “[PHP] Formato de Ticket Básico para impresoras de Tickets con FPDF

  • jheynsfenix

    quera saber si lo que dijiste aquí
    “En la linea 4, creamos el documento, en este caso es de 45 (milímetros) de ancho y 350 (milímetros) de alto, es decir el ticket es muy largo, esto es así para que el ticket no se corte, si es muy chico se va a cortar y descuadrar, pero si es muy largo, la impresora solo va a imprimir hasta donde este el texto.”

    ¿funciona con todas las impresoras térmicas? es decir ellas solo imprimen hasta donde hay texto cuando el pdf es muy largo?? es que estoy usando mpdf y como estoy trabajando con facturas estas hacen un salto de pagina dependiendo del tamaño de hoja que le haya asignado pero si lo que dices es cierto solo tendria que darle un tamaño muy largo a la hoja para que me muestre todo lo que quiero y así cuando mande a imprimir solo imprima hasta donde hay texto.. es asi?? agradecería mucho tu respuesta

    • Asi es amigo, ya lo he comprobado con varios modelos de impresoras, por muy largo que este el ticket o la hoja, estas impresoras solo imprimen hasta donde este el ultimo carácter.

  • Muy buen post 😉
    En PHP 5.5.12 funciona correctamente pero en PHP 7.1.18 da error

    Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; FPDF has a deprecated constructor in \ticket_fpdf\fpdf\fpdf.php on line 12
    FPDF error: Some data has already been output, can’t send PDF file

    ¿Cual seria la solución?

    Muchas gracias
    Saludos

    • Es un detalle de la libreria FPDF con el soporte de PHP 7, tal vez en el repositorio original de FPDf ya lo corrigieron, lo que pasa es que en PHP 7 ya no es posible que el constructor de la clase se llame de la misma manera de la clase, obligatoriamente el constructor debe llamarse __construct() y eso causa conflicto con muchas librerias mas.

Leave a Reply