PDA

Ver la Versión Completa : Impresion linea por linea en Impresora Termica


oscarac
24-08-2017, 16:41:10
buenos dias

tengo una rutina de impresion (que la saque de aqui) y que me funciona bien en las impresoras matriciales que es esta de aqui

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 esta que cuando lo utilizo en la impresora termica, la impresion sale linea por linea y no de golpe, como se acostumbra a imprimir en esas impresoras.

la idea que tengo es crear un reporte (con quickreport) elaborar el ticket y mandarlo a imprimir de forma directa
la pregunta es, como hago para que se haga el corte de papel, como mando la secuencia de escape
WriteRawDataToPrinter('Epson',#27+'m' + Chr(10) + Chr(13));


en el quickreport

se entiende?
alguien tiene una solucion?

darkerbyte
28-08-2017, 22:28:53
Hay varias maneras

La más facil, si es impresora térmica instalate el driver. Genera la información y metela en un RichEdit y usa el método print del richedit.
Con eso debe imprimir bien y te hará el corte de papel de manera automática. (No olvides especificar la impresora en el objeto Printer)

La segunda manera es hacerlo imprimiendo (pintando) directamente sobre el objeto Printer

La tercera es instalar la impresora como "solo texto" y mandarle los datos en formato raw
Es la que menos te recomiendo porque no podras imprimir gráficos. Pero es muy rápida.

Yo en general ocupo los tres métodos de manera que puedas trabajar con cualquier miniprinter que le instalen al equipo sin importar
modelo, driver, tipo, puerto etc.

manelb
29-08-2017, 07:26:54
Nosotros utilizamos el quickreport para imprimir tickets y del corte de papel i de la apertura del cajon portamonedas se encarga el driver de la impresora.
Normalmente puedes seleccionar corte por documento o al final de la impresión y en el caso del cajón, apertura antes o después de imprimir.
De esta forma no hace falta utilizar códigos de escape.

oscarac
30-08-2017, 00:13:00
Hay varias maneras

La más facil, si es impresora térmica instalate el driver. Genera la información y metela en un RichEdit y usa el método print del richedit.
Con eso debe imprimir bien y te hará el corte de papel de manera automática. (No olvides especificar la impresora en el objeto Printer)

La segunda manera es hacerlo imprimiendo (pintando) directamente sobre el objeto Printer

La tercera es instalar la impresora como "solo texto" y mandarle los datos en formato raw
Es la que menos te recomiendo porque no podras imprimir gráficos. Pero es muy rápida.

Yo en general ocupo los tres métodos de manera que puedas trabajar con cualquier miniprinter que le instalen al equipo sin importar
modelo, driver, tipo, puerto etc.

tienes ejemplos?

Casimiro Notevi
30-08-2017, 08:57:36
¿Están instalados los controladores apropiados?