Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Impresión
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 23/07/2014
hgiacobone's Avatar
hgiacobone hgiacobone is offline
Miembro
 
Join Date: May 2003
Location: La Plata, Bs. As., Argentina
Posts: 165
Poder: 24
hgiacobone Va por buen camino
Arrow Impresora Zebra GC420 con EPL

Saludos colegas,
Tengo que lograr generar una etiqueta con codigos de barras en una impresora Zebra GC420, pero no tengo suerte con las pruebas.
Entiendo que hubo varios foros tratando temas similares, pero en ninguno hay una solución factible.

Primero, este dispositivo se comunica por puerto USB, que es como el viejo Serial, pero tiene asignación dinamica por parte del SO (USB001, USB002,...) con lo cual es dificil determinar en donde está ubicada la impresora. Por ahora, yo trato de ubicarla mediante el "nombre" del dispositivo, haciendo un llamado a la funcion Printer de la unit Printers, ago asi:
Código Delphi [-]
unit MiPrograma;

interface

uses
..., Printers,...
//
//
procedure TForm1.IniciandoModulo();  
begin
  //Esto es para listar las impresoras disponibles, incluso la impresora USB
  ComboBox1.Items.Clear;
  ComboBox1.Items.AddStrings(Printer.Printers);
{...}
end;

Segundo problema, es que a mi me pasan un archivo TXT con toda la instruccion EPL necesaria. Aqui un ejemplo del txt :
Code:
I8,A,001


Q508,024
q863
rN
S3
D7
ZT
JF
OD
R25,0
f100
N
B200,189,0,E30,4,8,130,B,"3836556465461"
A99,31,0,4,6,6,N,"Esto es un ejemplo"
P1
Puede que este archivo sea incorrecto, porque en otros foros he visto que las secuencias deben comenzar con el prefijo "^" que aqui está ausente, pero, el driver de la impresora (Dispositivo de impresion->Propiedades) permite cargar y enviar un fichero externo y al cargar ese fichero lo imprime bien. Lo que desconozco es si antes lo pre-procesa de alguna forma.

La rutina de impresión se basa en una rutina ya conocida para enviar comandos RAW (muy utilizado con impresoras para POS) y es la siguiente:
Código Delphi [-]
procedure TForm1.Imprimir();
var
  fTextFile, fPrnFile:TextFile;
  sPRN, s, s1: string;   
begin
 
  //Con este OpenDialog recupero el archivo TXT que necesito imprimir
  TRY
    s:= GetCurrentDir;
    ChDir(s);
    OpenDialog1.InitialDir:= s;
  EXCEPT
    try
      s:= ExtractFilePath(paramStr(0));
      ChDir(s);
      OpenDialog1.InitialDir:= s;
    except
        s:= PathInicial; //DataMod
        ChDir(s);
        OpenDialog1.InitialDir:= s;
    end;
  END;

  if OpenDialog1.Execute then
  begin
      try

        sPRN:= Trim(ComboBox1.Text); //Aqui se toma la impresora Zebra por USB

        AssignFile(fTextFile, OpenDialog1.FileName );
        Reset(fTextFile);
              try
                While Not Eof(fTextFile) Do
                begin
                  ReadLn(fTextFile, s);
                  WriteRawDataToPrinter(sPRN, s);  //PRUEBA 1: con esto pretendo enviar instrucciones linea a linea y no funciona
                  s1:= s1 + s;
                end;

              //  WriteRawDataToPrinter(sPRN, s1); //PRUEBA 2: con esto pretendo enviarlo todo junto y tampoco funciona

              except
                on E:Exception do MessageDlg(E.Message, mtWarning, [mbOk],0);
              end;
      finally
        CloseFile(fTextFile);
      end;
  end;
end;

//----------------------------------------------

{--la siguiente funcion se encuentra en otra unit pero es indistinto---}
function WriteRawDataToPrinter(PrinterName: String; Str: String): Boolean;
var
  PrinterHandle: THandle;
  DocInfo: TDocInfo1;
  i: Integer;
  B: Byte;
  Retorna: DWORD;
begin
  Result:= FALSE;
  if OpenPrinter(PChar(PrinterName), PrinterHandle, nil)
  then try
      FillChar(DocInfo,Sizeof(DocInfo),#0);
      with DocInfo do
      begin
        pDocName:= PChar('Etiqueta...');
        pOutputFile:= nil;
        pDataType:= 'RAW';
      end;
      if StartDocPrinter(PrinterHandle, 1, @DocInfo) <> 0 then
      try
        if StartPagePrinter(PrinterHandle) then
        try
          while Length(Str) > 0 do
          begin
            if Copy(Str, 1, 1) = '\' then
            begin
              if Uppercase(Copy(Str, 2, 1)) = 'X' then
                Str[2]:= '$';
              if not TryStrToInt(Copy(Str, 2, 3),i) then
                Exit;
              B:= Byte(i);
              Delete(Str, 1, 3);
            end else B:= Byte(Str[1]);
            Delete(Str,1,1);
            WritePrinter(PrinterHandle, @B, 1, Retorna);
          end;
          Result:= TRUE;
        finally
          EndPagePrinter(PrinterHandle);
        end;
      finally
        EndDocPrinter(PrinterHandle);
      end;
  finally
    ClosePrinter(PrinterHandle);
  end;
end;

La cosa es que con esto la impresora ni se inmuta...
Alguna sugerencia al formato del archivo; a la forma de enviar la secuencia y/o al código en general?
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Reply With Quote
  #2  
Old 23/07/2014
orodriguezca orodriguezca is offline
Miembro
 
Join Date: Jan 2009
Posts: 221
Poder: 18
orodriguezca Va por buen camino
Que versión de Delphi utilizas?, en cualquier versión posterior a Delphi 2009 se recomienda la utilización de variables AnsiString en lugar de string cuando se envia/recibe información a otros dispositivos.
Reply With Quote
  #3  
Old 23/07/2014
juanelo's Avatar
juanelo juanelo is offline
Miembro
 
Join Date: Sep 2007
Posts: 1,087
Poder: 21
juanelo Va por buen camino
Te envio una unidad que utilizo sin problema, se basa en mandar a imprimir a la "cola de impresion" de la impresora que se seleccione, sin importar si es USB, LPT, etc.
Actualemente me sirve entre otras cosas para un sistema de etiquetado con Zebra y Datamax.
Te anexo la unidad y un ejemplo de uso.
Attached Files
File Type: zip URaw.zip (1.9 KB, 141 views)
__________________
Ya tengo Firma!
Reply With Quote
  #4  
Old 23/07/2014
juanelo's Avatar
juanelo juanelo is offline
Miembro
 
Join Date: Sep 2007
Posts: 1,087
Poder: 21
juanelo Va por buen camino
Esta otra unidad tambien la uso, y es la que actualmente tengo, la anterior por error te la mande, esta es la actualizada.
Basicamente su uso es asi:

Código Delphi [-]

procedure Enviar_Etiqueta(s : string);
var
        xPrn: TRawPrint;
        i : integer;
begin
        xPrn := TRawPrint.Create;
        xPrn.DeviceName:= "IMPRESORA"; 
       xPrn.JobName = "ETIQUETA";
// nombre de la impresora. Lo puedes encontrar correctamente en la 
// variable printer. Pulsa f1 buscando printer para mas informacion.
// el URaw no es mas que una simplificacion del uso de printer para texto

         if xPrn.OpenDevice = False then
        raise exception.Create('Error en impresora.');

        xPrn.WriteString(s);
        

        xPrn.CloseDevice;
        xPrn.Free;
end;
Attached Files
File Type: zip RawPrint.zip (1.5 KB, 116 views)
__________________
Ya tengo Firma!
Reply With Quote
  #5  
Old 23/07/2014
hgiacobone's Avatar
hgiacobone hgiacobone is offline
Miembro
 
Join Date: May 2003
Location: La Plata, Bs. As., Argentina
Posts: 165
Poder: 24
hgiacobone Va por buen camino
Juanelo muchas gracias... pero como se utiliza esto? hay que instalarlo?
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Reply With Quote
  #6  
Old 23/07/2014
juanelo's Avatar
juanelo juanelo is offline
Miembro
 
Join Date: Sep 2007
Posts: 1,087
Poder: 21
juanelo Va por buen camino
Si, instalas la unidad y luego le haces referencia con USES
__________________
Ya tengo Firma!
Reply With Quote
  #7  
Old 29/07/2014
hgiacobone's Avatar
hgiacobone hgiacobone is offline
Miembro
 
Join Date: May 2003
Location: La Plata, Bs. As., Argentina
Posts: 165
Poder: 24
hgiacobone Va por buen camino
Question

Quote:
Originally Posted by juanelo View Post
Si, instalas la unidad y luego le haces referencia con USES
Disculpame pero soy medio lerdo con esto....
Que hago?
Pongo el .PAS en el mismo directorio con el resto de los archivos fuente y lo agrego al proyecto ?
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
impresora zebra con windows 7 y delphi Oscar Guzmán Impresión 6 24/09/2012 07:46
Imprimir con Zebra S4M usb emanuelbarrios Impresión 1 03/08/2012 09:51
Alguien sabe como se configura impresora Zebra MZ 320? mamcx Varios 0 08/02/2010 17:30
Cambiar la letra a la impresora zebra lp boondock13 Impresión 1 03/10/2007 09:48
Impresora Zebra TLP-2488 IVAND Impresión 4 02/02/2006 01:26


All times are GMT +2. The time now is 08:51.


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