Ver Mensaje Individual
  #7  
Antiguo 15-09-2015
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 196
Reputación: 20
darkerbyte Va por buen camino
Lightbulb 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:
$ # " ' % ; . , ? ! / * - + [ ] {} & < > ( ) _
Responder Con Cita