Ir al contenido


Foto

Imprimir en Epson TMU-220A desde DXE2


  • Por favor identifícate para responder
6 respuestas en este tema

#1 marcelogracia

marcelogracia

    Member

  • Miembros
  • PipPip
  • 38 mensajes

Escrito 25 mayo 2014 - 08:36

Amigos, tengo la necesidad de imprimir texto a una impresora EPSON TMU-220A , no es fiscal sino que es tickeadora. por lo cual debe imprimir directamente texto sin necesidad de OCX ni otro componente.
Actualmente en Delphi 2010 tengo instalado una unit RawPrint que me permite imprimir a las matriciales y demás. pero en DXE2 no puedo instalar esta unit, no me compila.

Quisiera saber si alguno tiene o sabe como enviar texto a la TMU-220A desde delphi.
o si pudieran ayudarme a retocar el unit para que me compile en Delphi XE2
El error que tengo en DXE2 es que no me reconoce el Metodo  OpenPrinter(PWideChar(DeviceName), hPrinter, nil) me da error en el 2 parametro.

Desde ya, muchas gracias!

Archivos adjuntos


  • 0

#2 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 mensajes
  • LocationMisiones, Argentina

Escrito 25 mayo 2014 - 08:42

Por ahí te sirve esto:
http://www.cordobaof...sionDelphi.html
Este es el código que figura:



delphi
  1. const
  2.   ESC=CHR($1B);
  3.   GS=Chr($1D);
  4.   Inicializa=ESC+'@';
  5.   Alin=ESC+'a';
  6.   Izquierda=Alin+CHR(0);
  7.   Centrado =Alin+CHR(1);
  8.   Derecha  =Alin+CHR(2);
  9.   FTE=ESC+'!';
  10.   Fte10pp                =FTE+CHR(0);
  11.   Fte12pp                =FTE+CHR(1);
  12.   Fte10ppProp        =FTE+CHR(2);
  13.   Fte12ppProp        =FTE+CHR(3);
  14.   Fte10ppComp      =FTE+CHR(4);
  15.   Fte12ppComp      =FTE+CHR(5);
  16.   Fte10ppPropComp=FTE+CHR(6);
  17.   Fte12ppPropComp=FTE+CHR(7);
  18.   Fte10ppNegr        =FTE+CHR(8);
  19.   Fte12ppNegr        =FTE+CHR(9);
  20.   LF          =CHR(10);
  21.   Colores    =ESC+'r';
  22.   FteNegro  =Colores+CHR(0);
  23.   FteRojo  =Colores+ CHR(1);
  24.   LineaAtras=ESC+'K'+CHR(30);
  25.   Corte      =GS+'V'+CHR(66)+CHR(4);
  26.  
  27. function Imprimir(Puerto:Integer;Texto:string):byte;
  28. const
  29.     Status=#16#4#1;
  30.     Causa= #16#4#2;
  31. var Num:Byte;
  32.     cont:Word; 
  33.     Mode:DCB; 
  34.     Tiempos:COMMTIMEOUTS; 
  35.     // MODO DEL PUERTO SERIE
  36.     procedure PoneModo;
  37.     begin
  38.       GetCommState(Puerto, Mode);
  39.       Mode.BaudRate := 9600;
  40.       Mode.ByteSize := 8;
  41.       Mode.Parity := NOPARITY; 
  42.       Mode.StopBits := ONESTOPBIT; 
  43.       SetCommState(Puerto, Mode);   
  44.       GetCommTimeouts(Puerto, Tiempos); 
  45.       Tiempos.ReadIntervalTimeout := 300;
  46.       Tiempos.ReadTotalTimeoutMultiplier:= 300;
  47.       Tiempos.ReadTotalTimeoutConstant:= 300; 
  48.       SetCommTimeouts(Puerto, Tiempos); 
  49.       GetCommTimeouts(Puerto, Tiempos); 
  50.     end;
  51.     // ESCRIBE CADENA Y DEVUELVE CARACTERES ENVIADOS
  52.     function Escribe(Cad:string):Integer;
  53.     begin
  54.       cont:=0;
  55.       repeat
  56.         inc(cont);
  57.         FileWrite(puerto,Cad[cont],1);
  58.       until cont=Length(cad);
  59.       Result:=cont;
  60.     end;
  61.     // CONTROLA SI HUBO ERROR Y DEVUELVE EL NUMERO DE ERROR
  62.     function Controla:Integer;
  63.     begin
  64.       Escribe(Status);
  65.       Num:=0;
  66.       cont := FileRead(Puerto,Num,1);   
  67.       Result:=Num and 8; 
  68.       if cont = 0 then Result:=99;   
  69.       if Result=8 then begin
  70.         Escribe(Causa);
  71.         Num:=0;
  72.         FileRead(Puerto,Num,1);
  73.         Result:=Num and 44;
  74.       end;
  75.     end;
  76. begin
  77.   case Puerto of
  78.     1:Puerto:=FileOpen('COM1',fmOpenReadWrite);
  79.     2:Puerto:=FileOpen('COM2',fmOpenReadWrite);
  80.     3:Puerto:=FileOpen('COM3',fmOpenReadWrite);
  81.     4:Puerto:=FileOpen('COM4',fmOpenReadWrite);
  82.   end;
  83.   PoneModo;
  84.   Escribe(Inicializa);
  85.   if Texto<>'' then begin
  86.     Texto:= AnsiReplaceStr(Texto,'Ñ', #165);
  87.     Texto:= AnsiReplaceStr(Texto,'ñ', #164);
  88.     Texto:= AnsiReplaceStr(Texto,'á', #160);
  89.     Texto:= AnsiReplaceStr(Texto,'é', #130);
  90.     Texto:= AnsiReplaceStr(Texto,'í', #161);
  91.     Texto:= AnsiReplaceStr(Texto,'ó', #162);
  92.     Texto:= AnsiReplaceStr(Texto,'ú', #163);
  93.     Escribe(Texto);
  94.   end;
  95.   Result:=Controla;
  96.   FileClose(Puerto);
  97. end;
  98.  
  99. // Ejemplo de uso
  100. var Cad:string;
  101. begin
  102.   Cad:='Prueba de impresión'+slinebreak+'Probando TM-U220'+LF;
  103.   Cad:=LineaAtras+LineaAtras+LineaAtras+LineaAtras+Cad+Corte;
  104.   Imprimir(1,Cad);
  105. end;


  • 0

#3 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 26 mayo 2014 - 09:20

Hola.

La forma más sencilla es que simplemente instalen los drivers de la impresora (tendrán que descargarlos de la página de Epson) y utilizarla como cualquier otra impresora de Windows.

Saludos.
  • 0

#4 marcelogracia

marcelogracia

    Member

  • Miembros
  • PipPip
  • 38 mensajes

Escrito 27 mayo 2014 - 07:16

MARC asi esta funcionando. pero es muy lento. Demora entre 30/40seg por ticket
Voy a tratar de sacar datos que no sean valido y tratar de agilizar. De todas formas probare como texto.
Gracias.
  • 0

#5 rodrinig

rodrinig

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 27 mayo 2014 - 12:16

Hola, mira yo solamente doy de alta una impresora Generic/Text only y le indico el puerto que corresponde y mi codigo es el siguiente:



delphi
  1. procedure TfrmVAdmiSoloDes.btnImpClick(Sender: TObject);
  2. Var MyPrinter: TextFile;
  3. xcan,  xval, xtot,  xcam:shortstring;
  4. xdes : string[35];
  5. xAne : string[35];
  6. xsum:real;
  7. consulta:string;
  8. begin
  9.  
  10.  
  11.   AssignFILE(MyPrinter,'COM1');
  12.   ReWrite(MyPrinter);
  13. //  Write(MyPrinter, CHR(27) + CHR(64)); // Inicializar Impresora
  14.   //Write(MyPrinter, CHR(27)+CHR(67)+CHR(44)); // Fijar Tamaño en Lineas
  15. //  Write(MyPrinter,CHR(27)+ CHR(77)); // Tipo de Letra Chicas
  16. //  Write(MyPrinter,CHR(27)+ CHR(104)+CHR(2)); // Tipo de Letra Chicas
  17. //  Write(MyPrinter,CHR(27)+ CHR(13)); // Tipo de Letra Chicas
  18.   //Write(MyPrinter,CHR(27)+CHR(197)); // Negrita
  19.   Writeln(MyPrinter,'----------------------------------------');
  20.   Writeln(MyPrinter,'');
  21.   Writeln(MyPrinter,'');
  22.   //Write(MyPrinter,CHR(27)+CHR(179)+CHR(28)); // Espacio entre Lines
  23.   Writeln(MyPrinter,'* * * COCINA * * * ');
  24.   Writeln(MyPrinter,'NR.ORDEN:' + cdsTempME_ORDEN.asstring + '  ' + ' HORA: ' + cdsTempOR_INICIO.asstring);
  25.   Writeln(MyPrinter,'Moso :  ' + self.cdsTempMO_NOMBRE.asstring);
  26.   Writeln(MyPrinter,'Mesa :  ' + self.cdsMesasME_DESCRIP.asstring );
  27. //----------------------------
  28. //------------------------------
  29.   Writeln(MyPrinter,'----------------------------------------');
  30.   self.cds_prin.First;
  31.   while not self.cds_prin.Eof do
  32.   begin
  33.     xdes:=copy(self.cds_prinORPR_DESCRIP.AsString,1,35);
  34.     Writeln(MyPrinter,xdes);
  35.     if SELF.cds_prin_d.Active then
  36.       self.cds_prin_d.Close;
  37.     self.cds_prin_d.DataSet.Params[0].AsInteger := self.cds_prinORPR_N_ORDEN.AsInteger ;
  38.     self.cds_prin_d.DataSet.Params[1].AsInteger  := self.cds_prinORPR_INDICE.AsInteger ;
  39.     self.cds_prin_d.Active := True;
  40.     if not self.cds_prin_d.IsEmpty then
  41.       begin
  42.         self.cds_prin_d.First;
  43.         while not self.cds_prin_d.Eof do
  44.           begin
  45. //            xcan:=format('%2.0f',[self.cds_prin_dORPRD_INX.AsFloat]);
  46.             xdes:=copy(self.cds_prin_dORPRD_DESCRIP.AsString,1,25);
  47.             Writeln(MyPrinter,'*'+' '+xdes);
  48.             self.cds_prin_d.Next;
  49.           end;
  50.       end;
  51.     if dm.sp_marco_prin.active then
  52.       dm.sp_marco_prin.Close;
  53.     dm.sp_marco_prin.Params[0].AsInteger := self.cds_prinORPR_N_ORDEN.asinteger ;
  54.     dm.sp_marco_prin.Params[1].asinteger := self.cds_prinORPR_INDICE.asinteger ;
  55.     dm.sp_marco_prin.ExecProc ;
  56.  
  57.     self.cds_prin.Next;
  58.   end;
  59.   Writeln(MyPrinter,'----------------------------------------');
  60.   Writeln(MyPrinter,'');
  61.   Writeln(MyPrinter,'');
  62.   Writeln(MyPrinter,'');
  63.   Writeln(MyPrinter,'');
  64.   Writeln(MyPrinter,'');
  65.   Writeln(MyPrinter,'');
  66.   Writeln(MyPrinter, #27+#105); //corte de papel  ESC+i  o #27+(el valor ascii de i)
  67. //Write(MyPrinter,#12); // Expulsar la Hoja
  68.   System.CloseFile(MyPrinter);
  69.   self.cds_prin.Refresh;


  • 0

#6 marcelogracia

marcelogracia

    Member

  • Miembros
  • PipPip
  • 38 mensajes

Escrito 28 mayo 2014 - 03:41

Instale el RawPrint, envio a imprimir, pero no puedo enviar el comando para el salto de linea, ni tampoco el comando escape para cortar el papel..
No me lo toma, y me esta imprimiendo todo en una sola linea


  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 28 mayo 2014 - 04:13

Yo usé esa impresora en un sistema hace ya algunos años. Si mal no recuerdo tiene un conector adicional que abre el cajón de monedas.

Bueno la impresión en esa impresora yo la resolví con quickreport y configurando el tamaño de papel predeterminado en las opciones de la impresora. El corte lo hacía si mal no recuerdo con el salto de hoja. :)
  • 0




IP.Board spam blocked by CleanTalk.