Este tema me ha dado verdaderos quebraderos de cabeza y no he podido solucionarlo con información de ningún otro lugar. Me gustaría compartirlo por si alguien se encuentra con el mismo problema:
Hemos detectado que en windows 7 la impresión se vuelve muy lenta cuando llamamos reiteradamente a la función para escribir cada linea de impresión es decir algo como:
WriteRawDataToPrinter('MI_IMPRESORA', 'LINEA 1');
WriteRawDataToPrinter('MI_IMPRESORA', 'LINEA 2');
WriteRawDataToPrinter('MI_IMPRESORA', 'LINEA 3');
WriteRawDataToPrinter('MI_IMPRESORA', 'LINEA 4');
WriteRawDataToPrinter('MI_IMPRESORA', 'LINEA 5');
...
mientras que si nuestro codigo fuese algo como ...
WriteRawDataToPrinter('MI_IMPRESORA', 'LINEA 1 LINEA 2 LINEA 3 LINEA 4 LINEA 5' );
nuestra impresión no sería lenta. Se debe al hecho de 'generar un documento' para linea y su correspondiente gasto de acceso.
Esta misma forma de proceder en windows 8 no produce lentitud alguna. (Supongo que lo gestiona el spooler de windows 8)
codigo fuente de ejemplo: delphi
uses
Winspool
------------------------------
function Tform1.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
WritePrinter(PrinterHandle, PChar(Str), Length(Str), Escritos);
Result:= TRUE;
finally
EndPagePrinter(PrinterHandle);
end;
finally
EndDocPrinter(PrinterHandle);
end;
finally
ClosePrinter(PrinterHandle);
end;
end;
Suscribirse a:
Enviar comentarios (Atom)
Jesús Moreno - Ingeniero Ténico Informático - consultor Informático
Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...
-
Ultima hora: Máxima difusión, aquí la sentencia del Tribunal Supremo sobre la Clausula Suelo . http://s01.s3c.es/imag/doc/ 2013-06-04/pg.4...
-
El ejemplo se ha probado en una base de datos Microsoft SQL Server 2008 R2 CREATE FUNCTION dbo . udf_GetNumeric (@ strAlphaNumeric VARCHA...
-
Al intentar compartir la impresora nos lanza un error que dice: " No se pudo guardar la configuración de la impresora. No hay no hay m...
No hay comentarios:
Publicar un comentario