PDA

Ver la Versión Completa : Enviar comandos a la impresora


Minotaure
12-03-2009, 18:29:51
Tengo una impresora de etiquetas Zebra ZM400. Quiero que cada vez que se impriman una serie de etiquetas se haga un corte. Hoy la opción de que la impresora corte cada etiqueta pero yo quiero que por ejemplo imprima 5 etiquetas juntas y luego corte. En el manual dice que hay la opción de corte demorado, que no corta hasta el envió del comando de ZPL ~JK.

El problema es que no sé cómo mandar des del Delphi 6 el comando de ZPL ~JK, y ahora no corta nunca las etiqueteas.
¿Alguien tiene idea de cómo mandar dicho comando des del código de Delphi a la impresora?


Muchas gracias de antemano.

Minotaure
16-03-2009, 14:03:18
Finalmente buscando y rebuscando por Internet he encontrado la solución. Ahora ya envío comandos des del Delphi a la impresora.

Por si alguien le puede ser de ayuda aquí copio el código:
function WriteRawDataToPrinter(PrinterName: String; Str: String): Boolean;
var
PrinterHandle: THandle;
DocInfo: TDocInfo1;
i: Integer;
B: Byte;
Escritos: DWORD;
begin
Result:= FALSE;
if OpenPrinter(PChar(PrinterName), PrinterHandle, nil) then
try
FillChar(DocInfo,Sizeof(DocInfo),#0);
with DocInfo do
begin
pDocName:= PChar('Printer Test');
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, Escritos);
end;
Result:= TRUE;
finally
EndPagePrinter(PrinterHandle);
end;
finally
EndDocPrinter(PrinterHandle);
end;
finally
ClosePrinter(PrinterHandle);
end;
end;

El problema que tengo ahora es que en el modelo de impresora que tengo (Zebra ZM400), sólo interpreta ordenes recibidas sobre el corte si está en modo de impresión Corte Demorado. Pues bien, cada vez que le envío algo a imprimir des de mi programa de Delphi me cambia automáticamente a Corte Manual y la instrucción de corte (~JK) la ignora. I la instrucción funciona bien, porqué si la ejecuto cuando he vuelto a poner la opción Corte Demorado sí que corta la etiqueta.

Utilizo las Fast Report 4 para generar la etiqueta que envio a la impresora. ¿Alguna idea de porqué me puede cambiar la configuración de la impresora?