Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Impresora de Etiquetas (https://www.clubdelphi.com/foros/showthread.php?t=96868)

pruz 01-10-2024 04:07:05

Impresora de Etiquetas
 
Hola amigos:

alguien a usado la impresora XPrinter Modelo XP-235B.
Necesito enviar codigo de programacion, para imprimir codigo de barra y texto. Nada ha resultado de lo que he realizado.


si alguien, me puede enviar codigo de ejemplo.
Uso dephi 7,

Gracias.

lucho6007 01-10-2024 22:48:11

¿Código EPL?
 
Hola!
¿Esa impresora tiene soporte para código EPL? Si es así podés enviar los comandos con el pass-through y ver qué sale.


Saludos

pruz 02-10-2024 02:24:32

lucho6007:

No tiene emulador EPL. Pero si tiene emulador (TSPL) y (ESC / POS). Yo probe este ultimo (ESC/POS) y no me funciono.
Pero puede ser que este yo haciendo algo malo.

Me puedes enviar alguno codigo como referencia.


Gracias

newtron 02-10-2024 10:07:11

Asegúrate de tener activo en la impresora la emulación ESC/POS porque igual tienes la TSPL y por eso no te hace caso.


Saludos.

pruz 03-10-2024 02:30:12

1 Archivos Adjunto(s)
Amigos:

Encontre estos emuladores y ejemplo, pero en formato DLL, pero no tengo Visual Basic, si alguien tiene la plataforma para que indique como migrarlo a Delphi 7.


Adjunto archivo comprimido, sin clave..

Saludos

pruz 03-10-2024 02:36:02

1 Archivos Adjunto(s)
adjunto ademas el emulador TSPL, tambien en Visula Basic


Saludos

Casimiro Notevi 03-10-2024 09:28:18

Según he leído lo que tienes que cambiar es la emulación en la impresora, vas a configuración y seleccionas esc/pos

CrazySoft 03-10-2024 15:04:45

Buen día, si tienes los códigos ESC/POS, podrías cambiar los valores o personalizar un nuevo tipo en este componente https://github.com/git-bee/TRAWPrinter


no encuentro con códigos ESC/POS de XPRINTER, si los encuentras podrías compartir

pruz 03-10-2024 15:11:45

Casimiro:

Si busque donde cambiar en la configuracion de impresoras, y no tiene por donde cambiarlo. Solo me permite cambiarlo a un emulardor Zebra, de los cuales si tengo codigo de impresion, pero aun asi no funciono.

asi, que esa opcion la descarte, a no ser que YO este haciendo algo mal, que lo mas probable. :):):):):)

Saludos

pruz 03-10-2024 15:15:01

1 Archivos Adjunto(s)
CrazySoft:

si creo que los tengo, los comparto. Solo necesito un Texto y Codigo Barra


Saludos,

delphi50jmb 05-10-2024 21:49:44

Hola Pruz.
Hace ya mucho tiempo tuve que programar una impresora de etiqutas XPrinter, para una cafeteria tipo Starbucks, que imprimia el numero de atencion y el nombre del cliente en una etiqueta para luego pegarla en el vaso.

Aqui va el codigo que utilizaba.

Código Delphi [-]
procedure ImprimeEtiqueta(sPuerto, sNumClie, sDescrip, sComentario: String);
begin
   writeln( sPuerto, 'CLS'); // Limpia el buffers de la impresora
   //writeln( sPuerto, 'BACKUP 220');    // Reversa la etiqueta 40 puntos. Trabaja junto con Backfeed
   //writeln( sPuerto, 'BACKFEED 220');   // Reversa la etiqueta 40 puntos
   writeln( sPuerto, 'DIRECTION 1');
   writeln( sPuerto, 'REFERENCE 1,1');  //posicion inicial
   //writeln( sPuerto, 'SHIFT 140');         // mueve la posision de la etiqueta
   //writeln( sPuerto, 'OFFSET 12.7 mm');
   //writeln( sPuerto, 'GAP 17.62 mm, 17.54 mm');
   writeln( sPuerto, 'TEXT 20,50,"3",0,1,1,' + '"' + 'Numero: ' + sNumClie + '"');
   writeln( sPuerto, 'TEXT 20,80,"2",0,1,1,' + '"' + sDescrip + '"');
   writeln( sPuerto, 'TEXT 20,110,"2",0,1,1,' + '"' + sComentario + '"');
   writeln( sPuerto, 'TEXT 20,200,"1",0,1,1,' + '"' + DateToStr(Date) + space(2) + TimeToStr(Time) + '"');
   writeln( sPuerto, 'PRINT 1');
   //writeln( sPuerto, 'FEED 300');   // Avanza la etiqueta 260 puntos
   //writeln( sPuerto, 'CUT');     // Corta la etiqueta
end;


Y, este otro codigo, lo utilice en algun momento para imprimir codigos de barra en en una impresora de etiqutas Zebra.

Código Delphi [-]
         ImpCodBarra( Tabla.FieldByName('Codigo').AsString,
                      Tabla.FieldByName('Talla').AsString,
                      Tabla.FieldByName('Color').AsString,
                      Tabla.FieldByName('Precio').AsString );

*******************************************************

procedure ImpCodBarra( sP1, sP2, sP3, Sp4: String );
var
   a         : Integer;
   iCantidad : Integer;
   iCantAux  : Extended;

begin
   AssignFile(MyFile, iPtoImpBar );
   reset( MyFile );
   rewrite(MyFile);

   writeln( MyFile, 'N');
   writeln( MyFile, 'S6');

   iCantidad := StrToInt(sParamB);

   for a := 1 to iCantidad do
   begin
      //
      Etiqutas3x1(sP1, sP2, sP3, Sp4 );
      //
      writeln( MyFile,  'P1' );  // ---
      writeln( MyFile,  'N');    //    +-- Controles internos para la impresora
      writeln( MyFile,  'O');    // ---

   end;
end;


procedure Etiqutas3x1(sCodigo, sTalla, sColor, sPrecio: String );
begin
     //                1)--- Pos. Columna
     //                |    2)--- Pos. Filas
     //                |    |  3)--- Rotacion.0=No rot.
     //                |    |  | 4)--- Font. 1..5
     //                |    |  | | 5)--- Ancho Horizontal
     //                |    |  | | | 6)--- Altura Vertical
     //                |    |  | | | | 7)--- N=Normal, R=Reversa
     //                |    |  | | | | |
     //                |    |  | | | | |    8)--- Data
     //                |    |  | | | | |    |
     //                |    |  | | | | |    |
     // Etiqueta 1     |    |  | | | | |    |
   writeln( MyFile,  'A000,020,0,2,1,1,N,"' + copy(sCodigo,1,20) + '"' ); // Codigo Barra
   writeln( MyFile,  'A000,040,0,2,1,1,N,"Color ' + sColor + '"' );
   writeln( MyFile,  'A000,060,0,2,1,1,N,"Talla ' + sTalla + '"' );

   writeln( MyFile,  'A000,080,0,2,1,1,N,"$ ' + Picture(sPrecio) + '.-"' );  // Precio

   // Etiqueta 2
   writeln( MyFile,  'A200,020,0,2,1,1,N,"' + copy(sCodigo,1,20) + '"' );
   writeln( MyFile,  'A200,040,0,2,1,1,N,"Color ' + sColor + '"' );
   writeln( MyFile,  'A200,060,0,2,1,1,N,"Talla ' + sTalla + '"' );

   writeln( MyFile,  'A200,080,0,2,1,1,N,"$ ' + Picture(sPrecio) + '.-"' );

   // Etiqueta 3
   writeln( MyFile,  'A470,020,0,2,1,1,N,"' + copy(sCodigo,1,20) + '"' );
   writeln( MyFile,  'A470,040,0,2,1,1,N,"Color ' + sColor + '"' );
   writeln( MyFile,  'A470,060,0,2,1,1,N,"Talla ' + sTalla + '"' );

   writeln( MyFile,  'A470,080,0,2,1,1,N,"$ ' + Picture(sPrecio) + '.-"' );
end;

Espero, te sirvan de ejemplo.

Saludos.

Jose Miguel B.

navbuoy 06-10-2024 13:19:33

le pregunte a Chat GPT y me dice:

Para imprimir códigos de barra y texto en una impresora XPrinter modelo XP-235B usando Delphi 7, generalmente se debe enviar comandos ESC/POS o similares directamente a la impresora. A continuación te doy un ejemplo básico de cómo hacerlo utilizando una conexión con el puerto de la impresora (por ejemplo, a través de un puerto COM o LPT):

CODIGO DE EJEMPLO:

Código:

uses
  Printers, Windows;

procedure TForm1.ImprimirCodigoDeBarras;
var
  hPrinter: THandle;
  DocInfo: DOC_INFO_1;
  BytesWritten: DWORD;
  RawData: AnsiString;
begin
  // Abrir la impresora por su nombre
  if OpenPrinter('XPrinter XP-235B', hPrinter, nil) then
  begin
    // Información del documento
    DocInfo.pDocName := 'Impresión de Código de Barras';
    DocInfo.pOutputFile := nil;
    DocInfo.pDatatype := 'RAW';  // RAW para enviar datos sin formato

    // Iniciar el trabajo de impresión
    if StartDocPrinter(hPrinter, 1, @DocInfo) > 0 then
    begin
      if StartPagePrinter(hPrinter) then
      begin
        // Aquí colocamos el código ESC/POS para imprimir código de barras y texto
        // Ejemplo de código para un código de barras tipo CODE128
        RawData := #29 + 'k' + #4 + '123456789012';  // Código de barras CODE128
        RawData := RawData + #10 + 'Texto debajo del código de barras' + #13#10; // Texto
       
        // Enviar datos a la impresora
        WritePrinter(hPrinter, PAnsiChar(RawData), Length(RawData), BytesWritten);
        EndPagePrinter(hPrinter);
      end;
      EndDocPrinter(hPrinter);
    end;
    ClosePrinter(hPrinter);
  end
  else
    ShowMessage('Error al abrir la impresora');
end;

Explicación:
Abrir la impresora: Se usa OpenPrinter con el nombre de la impresora configurada en Windows.
Iniciar un trabajo de impresión: Se llama a StartDocPrinter para iniciar la impresión.
Enviar comandos ESC/POS: Los comandos específicos de la impresora se envían como datos RAW. En este caso, se está enviando un comando para imprimir un código de barras CODE128.
Cerrar la impresora: Se finaliza el trabajo de impresión con EndDocPrinter.

Notas:
Asegúrate de que el nombre de la impresora coincide con el que está configurado en tu sistema.
Los comandos pueden variar según el modelo de impresora. Consulta el manual de la impresora para obtener detalles sobre los comandos específicos de impresión de códigos de barra.
Este código debería funcionar si la impresora utiliza comandos ESC/POS o similares.

pruz 07-10-2024 15:28:11

Muvhas gracias amigos

Probare los codigo y les cuento como me va.


Saludos

pruz 07-10-2024 16:24:56

Hola Amigos:

Probe ambos codigo.
Cuando ejecuto los dos codigos, por separado, ambos aparecen en la cola de impresion, pero ninguno sale a la impresora.


Volvi a probar la impresora con los test de prueba que trae y funciona perfecto. Pero con los codigo que ustedes me enviaron nada.

no funciona, seguire probando y cambiare algunos parametros.


Si alguien tiene otra idea?

Saludos
Gracias

tsk 07-10-2024 18:13:09

¿Cómo instalaste los drivers de la impresora?

Hace tiempo para una impresora ESC/POS en Windows la tuve que instalar como Generic/TextOnly, y de esa forma desde python le mandaba los comandos, usando python-escpos

Ve esta página

https://hackernoon.com/how-to-print-...and-javascript

Por lo tanto es fácil probar usando Node.

También otra cosa, es que en el ejemplo, al final mandan el comando END, si te aparece en la cola de impresión, podrías probar primero añadiendo ese END, en Delphi

Si no te funciona de esta forma podrías tratar de instalar la impresora como Generic/TextOnly, como en su momento yo le hice.

pruz 07-10-2024 18:58:08

Hola Delphi50jmb



La Variable sPuerto, de que tipo es y que valores debo traspasas

Código Delphi [-]
procedure ImprimeEtiqueta(sPuerto, sNumClie, sDescrip, sComentario: String);
begin
   writeln( sPuerto, 'CLS'); // Limpia el buffers de la impresora
   //writeln( sPuerto, 'BACKUP 220');    // Reversa la etiqueta 40 puntos. Trabaja junto con Backfeed
   //writeln( sPuerto, 'BACKFEED 220');   // Reversa la etiqueta 40 puntos
   writeln( sPuerto, 'DIRECTION 1');
   writeln( sPuerto, 'REFERENCE 1,1');  //posicion inicial
   //writeln( sPuerto, 'SHIFT 140');         // mueve la posision de la etiqueta
   //writeln( sPuerto, 'OFFSET 12.7 mm');
   //writeln( sPuerto, 'GAP 17.62 mm, 17.54 mm');
   writeln( sPuerto, 'TEXT 20,50,"3",0,1,1,' + '"' + 'Numero: ' + sNumClie + '"');
   writeln( sPuerto, 'TEXT 20,80,"2",0,1,1,' + '"' + sDescrip + '"');
   writeln( sPuerto, 'TEXT 20,110,"2",0,1,1,' + '"' + sComentario + '"');
   writeln( sPuerto, 'TEXT 20,200,"1",0,1,1,' + '"' + DateToStr(Date) + space(2) + TimeToStr(Time) + '"');
   writeln( sPuerto, 'PRINT 1');
   //writeln( sPuerto, 'FEED 300');   // Avanza la etiqueta 260 puntos
   //writeln( sPuerto, 'CUT');     // Corta la etiqueta
end;

pruz 07-10-2024 20:31:02

Solucionado
 
Ya, mirando un poco de lo suyo y un poco de lo mio llegue a la solucion
les dejo el codigo

Código Delphi [-]
procedure TForm1.Button5Click(Sender: TObject);
var
   MyFile : TextFile;
   NomImpresora :  String;
begin
   NomImpresora := 'etique2.txt';
   AssignFile(MyFile, NomImpresora );
//   reset( MyFile );
   rewrite(MyFile);

   writeln( MyFile, 'SIZE 48.7 mm, 80.1 mm');
   writeln( MyFile, 'DIRECTION 0,0');
   writeln( MyFile, 'REFERENCE 0,0');
   writeln( MyFile, 'OFFSET 0 mm');
   writeln( MyFile, 'SET PEEL OFF');
   writeln( MyFile, 'SET TEAR ON');
   writeln( MyFile, 'CLS');
   writeln( MyFile, 'BARCODE 351,66,"128M",98,0,90,4,8,"!104XP-!09935986215"');
   writeln( MyFile, 'CODEPAGE 1252');
   writeln( MyFile, 'TEXT 248,235,"2",90,1,1,"XP-35986215"');
   writeln( MyFile, 'TEXT 196,220,"1",90,1,1,"Texto de muestra"');
   writeln( MyFile, 'BARCODE 154,69,"128M",114,0,90,3,6,"!104SOL-!0993598!100X125"');
   writeln( MyFile, 'TEXT 35,236,"2",90,1,1,"SOL-3598X125"');
   writeln( MyFile, 'PRINT 1,2');
   writeln( MyFile, '');
   CloseFile( MyFile );


   ShellExecute(0, 'open', ('etiquetas.bat'), nil, nil, SW_SHOW);
   MessageDlg( 'Etiquetas Impresas. Proceso Terminado.' , mtinformation , [mbOk] , 0 );

end;

Muchas gracias a todos por su colaboracion

navbuoy 08-10-2024 12:28:06

guay, al menos lo has solucionado en poco tiempo


La franja horaria es GMT +2. Ahora son las 21:31:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi