Esta configuración es para Windows 7 Ultimate, con el dll php_printer copiado a la carpeta de extensiones de php y con la línea de extension agregada en el php.ini.
Asumiendo que usted conoce la estructura básica de un proyecto con el framework CakePHP, es decir el patrón MVC, pasaremos a crear nuestra función en nuestro controlador:
Estaré subiendo más ejemplos de códigos con CakePHP próximamente, cualquier consulta, pueden comentar
Asumiendo que usted conoce la estructura básica de un proyecto con el framework CakePHP, es decir el patrón MVC, pasaremos a crear nuestra función en nuestro controlador:
function imprimir($paramdetalle=null){//Recibe parámetro para cargar un detalle de venta
try {
$detalles = $this->Producto->query("select *
from tabladetalles
where codigo=".$paramdetalle);//Donde tabladetalles y el campo código son tu tabla y tu campo de identificación
$printer = "Ticketera";/*Nombre de la impresora ticketera instalada*/
$ph = printer_open($printer);/*Abrimos la impresora especificada más arriba*/
printer_start_doc($ph, 'Ticket');/*Iniciamos un documento temporal con el nombre de 'Ticket'*/
printer_start_page($ph);/*Iniciamos la página en la impresora*/
//Creamos un fuente para los datos de cabecera del ticket
$font = printer_create_font("Arial", 20, 8, PRINTER_FW_NORMAL, false, false, false, 0);
printer_select_font($ph, $font);/*Selecciona la fuente creada*/
//Datos de la cabecera
//Donde $ph, es la impresora, "Farmacia S.A.", es el texto, 0, es la columna y 10 es la fila
printer_draw_text($ph, "Farmacia S.A.", 0, 10);
printer_draw_text($ph, "RUC: 00000-0", 0, 30);
printer_draw_text($ph, "Direccion de la farmacia", 0, 50);
printer_draw_text($ph, "Factura Nro. 000-000-0000001", 0, 70);
printer_draw_text($ph, "------------------------------------------------------------------", 0, 90);
printer_draw_text($ph, "Cant", 0, 110);
printer_draw_text($ph, "Articulo", 60, 110);
printer_draw_text($ph, "Precio", 220, 110);
printer_draw_text($ph, "Total", 310, 110);
printer_draw_text($ph, "IVA", 370, 110);
printer_draw_text($ph, "------------------------------------------------------------------", 0, 130);
printer_delete_font($font);/*Eliminamos la fuente utilizada*/
$cont = 130;/*Creamos un contador para ubicar las filas del detalle del ticket*/
foreach ($detalles as $detalle) {
$cont = $cont + 20;/*Incrementamos en 20 el valor para la posición de la fila*/
/*Creamos otra fuente para el detalle del ticket, un poco más reducido que la cabecera*/
$fontprd = printer_create_font("Arial", 14, 5, PRINTER_FW_NORMAL, false, false, false, 0);
printer_select_font($ph, $fontprd);/*Seleccionamos la fuente creada*/
//Imprimimos los datos del detalle en la columna correspondiente al de la cabecera
printer_draw_text($ph, $detalle[0]['cantidad'], 0, $cont);
printer_draw_text($ph, $detalle[0]['pro_desc'], 60, $cont);
printer_select_font($ph, $fontprd);/*Seleccionamos nuevamente la fuente creada para el detalle*/
//Para alinear los números a la derecha
$s = strlen(number_format($detalle[0]['pro_precio'], 0, '', '.'));
$y = 260;
for ($i = 1; $i < $s + 1; $i++) {
$u = $i * -1;
printer_draw_text($ph, substr(number_format($detalle[0]['pro_precio'], 0, '', '.'), $u, 1), $y, $cont);
$y = $y - 8;
}
$s1 = strlen(number_format(($detalle[0]['pro_precio'] * $detalle[0]['cantidad']), 0, '', '.'));
$y1 = 340;
for ($i1 = 1; $i1 < $s1 + 1; $i1++) {
$u1 = $i1 * -1;
printer_draw_text($ph, substr(number_format(($detalle[0]['pro_precio'] * $detalle[0] ['cantidad']), 0, '', '.'), $u1, 1), $y1, $cont);
$y1 = $y1 - 8;
}
printer_draw_text($ph, $detalle[0]['pro_tipoimp'], 370, $cont);
printer_delete_font($fontprd);/*Elimina la fuente utilizada para el detalle*/
}
printer_end_page($ph);
printer_end_doc($ph);
printer_close($ph);
$this->Session->setFlash('Impresion realizada exitosamente');/*Muestra un mensaje*/
$this->redirect(array('action' => 'paginas/' . $paramdetalle));/*Redirecciona a la pagina especificada*/
} catch (Exception $ex) {//Captura la exception y la muestra como un mensaje
$this->Session->setFlash($ex);
}
}
A estas líneas de código le faltarían el total general, el impuesto, los datos del cliente, la fecha, etc., pero eso ya queda a cuenta de cada uno para agregar.Estaré subiendo más ejemplos de códigos con CakePHP próximamente, cualquier consulta, pueden comentar
No hay comentarios:
Publicar un comentario