Foros del Web » Programando para Internet » PHP »

Impresora térmica

Estas en el tema de Impresora térmica en el foro de PHP en Foros del Web. Buenos días les comento mi problema...estoy utilizando un impresora térmica para imprimir un pequeño ticket por el canje de unos puntos...primero lo que hice es ...
  #1 (permalink)  
Antiguo 08/06/2018, 10:19
 
Fecha de Ingreso: marzo-2009
Mensajes: 291
Antigüedad: 15 años, 1 mes
Puntos: 1
Pregunta Impresora térmica

Buenos días les comento mi problema...estoy utilizando un impresora térmica para imprimir un pequeño ticket por el canje de unos puntos...primero lo que hice es crear un pdf y de ahí le daba imprimir(fácil) pero el problema fue que me imprimía el tamaño de una hoja A4, investigue y vi que hay una librería /Mike42/Escpos pero no le puedo hacer funcionar no se hace nada..ingresa pero no hace nada este es el código

<?
require __DIR__ . '/termica/autoload.php'; //Nota: si renombraste la carpeta a algo diferente de "ticket" cambia el nombre en esta línea
use Mike42\Escpos\Printer;
use Mike42\Escpos\EscposImage;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnecto r;

/*
Este ejemplo imprime un
ticket de venta desde una impresora térmica
*/


/*
Una pequeña clase para
trabajar mejor con
los productos
Nota: esta clase no es requerida, puedes
imprimir usando puro texto de la forma
que tú quieras
*/
class Producto{

public function __construct($nombre, $precio, $cantidad){
$this->nombre = $nombre;
$this->precio = $precio;
$this->cantidad = $cantidad;
}
}

/*
Vamos a simular algunos productos. Estos
podemos recuperarlos desde $_POST o desde
cualquier entrada de datos. Yo los declararé
aquí mismo
*/

$productos = array(
new Producto("Papas fritas", 10, 1),
new Producto("Pringles", 22, 2),
/*
El nombre del siguiente producto es largo
para comprobar que la librería
bajará el texto por nosotros en caso de
que sea muy largo
*/
new Producto("Galletas saladas con un sabor muy salado y un precio excelente", 10, 1.5),
);

/*
Aquí, en lugar de "POS-58" (que es el nombre de mi impresora)
escribe el nombre de la tuya. Recuerda que debes compartirla
desde el panel de control
*/

$nombre_impresora = "POS-58";


$connector = new WindowsPrintConnector($nombre_impresora);
$printer = new Printer($connector);


/*
Vamos a imprimir un logotipo
opcional. Recuerda que esto
no funcionará en todas las
impresoras

Pequeña nota: Es recomendable que la imagen no sea
transparente (aunque sea png hay que quitar el canal alfa)
y que tenga una resolución baja. En mi caso
la imagen que uso es de 250 x 250
*/

# Vamos a alinear al centro lo próximo que imprimamos
$printer->setJustification(Printer::JUSTIFY_CENTER);

/*
Intentaremos cargar e imprimir
el logo
*/
try{
$logo = EscposImage::load("logo.png", false);
$printer->bitImage($logo);
}catch(Exception $e){/*No hacemos nada si hay error*/}

/*
Ahora vamos a imprimir un encabezado
*/

$printer->text("Yo voy en el encabezado" . "\n");
$printer->text("Otra linea" . "\n");
#La fecha también
$printer->text(date("Y-m-d H:i:s") . "\n");


/*
Ahora vamos a imprimir los
productos
*/

# Para mostrar el total
$total = 0;
foreach ($productos as $producto) {
$total += $producto->cantidad * $producto->precio;

/*Alinear a la izquierda para la cantidad y el nombre*/
$printer->setJustification(Printer::JUSTIFY_LEFT);
$printer->text($producto->cantidad . "x" . $producto->nombre . "\n");

/*Y a la derecha para el importe*/
$printer->setJustification(Printer::JUSTIFY_RIGHT);
$printer->text(' $' . $producto->precio . "\n");
}

/*
Terminamos de imprimir
los productos, ahora va el total
*/
$printer->text("--------\n");
$printer->text("TOTAL: $". $total ."\n");


/*
Podemos poner también un pie de página
*/
$printer->text("Muchas gracias por su compra\nparzibyte.me");



/*Alimentamos el papel 3 veces*/
$printer->feed(3);

/*
Cortamos el papel. Si nuestra impresora
no tiene soporte para ello, no generará
ningún error
*/
$printer->cut();

/*
Por medio de la impresora mandamos un pulso.
Esto es útil cuando la tenemos conectada
por ejemplo a un cajón
*/
$printer->pulse();

/*
Para imprimir realmente, tenemos que "cerrar"
la conexión con la impresora. Recuerda incluir esto al final de todos los archivos
*/
$printer->close();
?>
  #2 (permalink)  
Antiguo 08/06/2018, 10:32
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Impresora Termica

Dependiendo de la libreria, puedes indicar el tamaño de la hoja de tu documento.

Yo suelo usar TCPDF para documentos con formato simple y wkhtmltopdf para documentos que requieren total exactitud en la generación del pdf a partir de un html complejo.

Aunque para tickets, una vez hice un script que genera un html simple (sólo texto) con el texto partido a cierto número de caracteres de ancho, y la impresión se hacía directa desde el navegador.
  #3 (permalink)  
Antiguo 08/06/2018, 11:21
 
Fecha de Ingreso: marzo-2009
Mensajes: 291
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Impresora Termica

Bien probare lo que mencionas..ahora si utilizo la librería..la impresora debe estar conectada al servidor no?? o sea el php no tiene forma no conectarse a la maquina cliente...por que en la maquina cliente que esta en red y compartida es la impresora térmica..para que varios clientes obtengan tickets
  #4 (permalink)  
Antiguo 08/06/2018, 15:56
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Impresora Termica

Las librerías de impresión suelen estar pensadas en impresoras conectadas directamente al servidor o en la misma red local.

Por esto mi recomendación de que generes un pdf con el tamaño que requieres, y que en la computadora del usuario se imprima en la impresora que éste tenga permitida.

Una opción que olvidé por que nunca la he usado es la impresión "en la nube" donde supuestamente puedes mandar a imprimir a equipos remotos con cierto control sobre la impresión.

Etiquetas: funcion, impresora, nombre, termica
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:24.