Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Imprimir en Zebra GK420d con EPL o FastReport (https://www.clubdelphi.com/foros/showthread.php?t=89018)

darkerbyte 11-09-2015 20:39:23

Imprimir en Zebra GK420d con EPL o FastReport
 
Hola.

Estoy tratando de hacer un modulo para imprimir etiquetas con código de barras desde Delphi XE5, Windows7, Impresora USB Zebra GK240d.

Intenté hacerlo con FastReport pero haciendo impresiones de prueba no detecta correctamente los margenes ni el tamaño de papel. Pensé que tal vez esta mal configurada la impresora o el papel así que diseñe una etiqueta desde Zebradesigner y he mandado a imprimir varias etiquetas consecutivamente y salen perfectas. Aquí pongo una imagen con ambos resultados:



Si puedes asesorarme, quizá en que estoy fallando en cuestiones de FastReport o si me puedes dar ayuda de como usar la etiqueta que ya diseñé desde delphi te estaré eternamente agradecido.
Gracias de antemano por tu valiosisimo tiempo y ayuda.

AgustinOrtu 11-09-2015 21:02:52

Hola

No creo que la impresora sea "especial" y que aunque le mandes "123" te imprima la etiqueta con el codigo de barras para "123"

El zebradesigner que mencionas debe "hacer algo" para que la impresora imprima la etiqueta con su codigo de barras y por eso sale "bien"

La solucion es generar desde FastReport el codigo de barras

Tenes que colocar un componente frxBarCode, elegir el tipo de codigo de barra correspondiente, y colocar el codigo de barras en la propiedad Text

darkerbyte 11-09-2015 21:18:06

Explicación
 
Hola AgustinOrtu

Te agradezco tu respuesta. Quizá no me expliqué bien. El problema que tengo con FastReport no es la impresión del código de barras, lo cual entiendo perfectamente se tiene que agregar un componente para ello.

El problema es que la impresión sale desfasada de la etiqueta sin importar lo que yo le imprima, sea texto o imágenes. Hice pruebas con QuickReport y me da el mismo resultado.

Inclusive intenté imprimir texto directamente usando el Canvas de Tprinter y, mandando texto a la cordenada (0,0), sale muy arriba, prácticamente esta imprimiendo en el
papel encerado. Claro, moví la coordenada "Y" con Canvas.TextOut(0,8,'COCA COLA 600ML NO RETOR'); y ya sale sobre la etiqueta pero muy a la derecha, justo como QuickReport,
es decir no puedo enviar la impresión mas a la izquierda donde inicia la etiqueta.

AgustinOrtu 12-09-2015 00:15:28

Disculpame leí mal y entendi cualquier cosa

Retiro lo dicho


Releí y te expresaste bien, es un problema de que manda a cualquier lado el texto

newtron 12-09-2015 10:26:34

Hola.

Por la experiencia que tengo con las impresoras de etiquetas tipo Zebra, Godex, etc. creo que lo más sano es usar en tu caso el Zebradesigner para generar una especie de plantilla en fichero de texto y posteriormente usar esa plantilla cambiando los datos variables y enviándolos directamente a la impresora con lo cual no tendrás ningún problema.

Saludos

juanelo 12-09-2015 20:35:08

Complementando lo que comento Newtron, te dejo la liga al manual, donde podras estudiar mas a fondo su lenguaje nativo de esta impresora (aunque tambien creo soporta epl).
Saludos

darkerbyte 15-09-2015 01:30:34

Solución
 
Gracias Newtron y Juanelo.

Esa fue la solución. Explico por si alguien también no tiene experiencia con este tipo de impresoras.

1. Configurar el tamaño del papel en las propiedades de la impresora
2. Con el Zebra Designer diseñar la etiqueta (utilizar campos de texto fijos y códigos de barras fijos, no usar variables)
3. Imprimir en la impresora algunas etiquetas consecutivas para verificar que el tamaño del papel esta correctamente configurado
4. Una vez que la etiqueta quedó a nuestro gusto le damos en imprimir pero activamos la opción "imprimir a archivo" y le damos en imprimir
5. Nos guarda un archivo con la extensión *.prn ese archivo lo abrimos con algun editor de texto y borramos la primera linea.
hasta encontrar ^XA (en lenguaje ZPL con esta instrucción se marca el inicio de un comando)
6. Dale una leida al manual que amablemente dejaron los compañeros para entender la sintaxis del ZPL
7. Busca los campos que vas a reemplazar y te haces una rutina en delphi que esté reemplazando esa información
con lo que vas a mandar a imprimir
8. Utiliza algun metodo para mandar a imprimir comandos a una impresora en RAW, yo uso el que sigue:

Código Delphi [-]
function TLabels.strToRaw(Comando : AnsiString; PrinterName : string): Boolean;
var
   PrinterHandle: THandle;
   N: DWORD;
   DocInfo1: TDocInfo1;
begin
  Result:= FALSE;
  if not OpenPrinter(PChar(PrinterName), PrinterHandle, nil) then
  begin
    ShowMessage('Error de impresora: ' + IntToStr(GetLastError));
    Exit;
  end
  else Try
      with DocInfo1 do
      begin
        pDocName := pChar('Imprimiendo etiqueta');
        pOutputFile:= pChar(#0);
        pDataType := pChar('RAW');
      end;
      if StartDocPrinter(PrinterHandle, 1, @DocInfo1) <> 0 then
      begin
          try
            if StartPagePrinter(PrinterHandle) then
            begin
              try
                Result:=( WritePrinter(PrinterHandle,pChar(comando),Length(comando), N)  );
                if not Result then ShowMessage('Error de impresora: ' + IntToStr(GetLastError));
              finally
                EndPagePrinter(PrinterHandle);
              end;
            end;
          finally
            EndDocPrinter(PrinterHandle);
          end;
      end;
  finally
    ClosePrinter(PrinterHandle);
  end;
end;

Ya nada mas para mandar a imprimir mandas algo como esto:

Código Delphi [-]
var
  sPRN, cadena: string;
  imprimio : Boolean;
  i : integer;
begin
    sPRN:= cbox_impresoras.Text;  // nombre de la impresora 
    cadena:='';
    for i := 0 to memo_raw.Lines.Count-1 do
        cadena := cadena+memo_raw.Lines.Strings[i]+#13+#10;
    imprimio:= Write_RAW_StringToPrinter( AnsiString(cadena), sPRN);
End;

Ya nada mas ten cuidado con los caracteres especiales, hay que reemplazarlos antes de mandar a imprimir:
\AD = ¡ (Admiración inicial)
\A0 = á
\82 = é
\A1 = í
\A2 = ó
\A3 = ú
\A4 = ñ
\A5 = Ñ
\B5 = Á
\90 = É
\D6 = Í
\E3 = Ó
\E9 = Ú
\91 = ü
\9A = Ü
\F8 = °
\1F = \

Simboloes sin problemas:
$ # " ' % ; . , ? ! / * - + [ ] {} & < > ( ) _

newtron 15-09-2015 09:17:28

Estupendo.

Me alegro de que hayas resuelto el problema.

Saludos. :)

Malparo 29-10-2015 12:49:01

Hola Darkerbite,

Estoy con el mismo dilema de impresion y no hemos losgrado imprimir con los codigo EPL...
He estado leyendo lo que mensionas en este foro, pero en la rutina strToRaw, defines un tipo de datos DocInfo1: TDocInfo1, que no entiendo a que se refiere....

No soy muy perito en este tema aun, podrias darme una manito por favor....

darkerbyte 21-11-2015 20:57:11

Ausencia
 
Cita:

Empezado por Malparo (Mensaje 498573)
Hola Darkerbite,

Estoy con el mismo dilema de impresion y no hemos losgrado imprimir con los codigo EPL...
He estado leyendo lo que mensionas en este foro, pero en la rutina strToRaw, defines un tipo de datos DocInfo1: TDocInfo1, que no entiendo a que se refiere....

No soy muy perito en este tema aun, podrias darme una manito por favor....

Hola, perdón por la tardanza no había entrado al foro ultimamente.
Si aun necesitas ayuda estoy a tus órdenes. En el software que estoy desarrollando ya puse compatibilidad con lenguaje ZPL y EPL basicamente es lo mismo
solo que las sintaxis son diferentes.


La franja horaria es GMT +2. Ahora son las 23:58:42.

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