Impressão direto na porta muito lenta!

Delphi

14/04/2005

:(
Estou usando a rotina para impressão direto na porta (porta LPT1, assignfile, writeln e etc...), para uma impressora matricial da Bematech, e no Win98 a rotina fica lenta demais! Já no Win2K e no WinXP ela imprime normalmente...
Alguém sabe o que pode estar acontecendo?


Kenji_rh

Kenji_rh

Curtidas 0

Respostas

Edilcimar

Edilcimar

14/04/2005

a impressão está no mesmo computador ou em rede?


GOSTEI 0
Cabelo

Cabelo

14/04/2005

Colega, já passei por problemas assim utilizando impressora de etiquetas.

Eu resolví da seguinte maneira..

Como vc utiliza direto na porta, ele possui um buffer de armazenamento, então eu pego toda a string do relatório e divido ela em partes de 255 caracteres cada, e para cada uma dessas partes, faço um for enviando byte a byte os dados para a porta, e por fim dou um comendo para impressão, com um relatório muito pesado e cheio de dados, esta impressão demora menos de 1s. :D

Acredito que deve acontecer com vc tb.


GOSTEI 0
Kenji_rh

Kenji_rh

14/04/2005

a impressão está no mesmo computador ou em rede?


A impressora está no mesmo computador onde imprimo!


GOSTEI 0
Edilcimar

Edilcimar

14/04/2005

Se estivesse em rede vc poderia estar com problemas de velocidade na impressão, mas com a impressora no mesmo computador a impressão sempre começa dentro dos 3 segundos iniciais, eu tenho sistema rodando com a Bematech não fiscal em win98 sem problema algum


GOSTEI 0
Kenji_rh

Kenji_rh

14/04/2005

Colega, já passei por problemas assim utilizando impressora de etiquetas. Eu resolví da seguinte maneira.. Como vc utiliza direto na porta, ele possui um buffer de armazenamento, então eu pego toda a string do relatório e divido ela em partes de 255 caracteres cada, e para cada uma dessas partes, faço um for enviando byte a byte os dados para a porta, e por fim dou um comendo para impressão, com um relatório muito pesado e cheio de dados, esta impressão demora menos de 1s. :D Acredito que deve acontecer com vc tb.


:oops:
Desculpe a minha ignorância, mas como mandarei a string byte a byte? Algo como usar o write(f,String[i])?


GOSTEI 0
Cabelo

Cabelo

14/04/2005

Desculpe a minha ignorância, mas como mandarei a string byte a byte? Algo como usar o write(f,String[i])?


Colega...

Pode ser assim..

mas não precisa chamar nenhuma função, pois a string é tb um ponteiro do tipo char, pode usar assim

for v_i := 0 to length(string) - 1 do
begin
porta := string[v_i];
end;

espero ter ajudado.


GOSTEI 0
Massuda

Massuda

14/04/2005

Estou usando a rotina para impressão direto na porta...
Já experimentou dar uma olhada no [url=http://devres.freeprohost.com/]VDOPrint[/url] do nosso colega Vinicius2K?

porta := string[v_i];
O kenji_rh não pode fazer isso pois ele está escrevendo o relatório em um arquivo e depois mandando para a impressora; ele não está mandando os dados diretamente para a porta da impressora.


GOSTEI 0
Cabelo

Cabelo

14/04/2005

:( Estou usando a rotina para impressão direto na porta (porta LPT1, assignfile, writeln e etc...), para uma impressora matricial da Bematech, e no Win98 a rotina fica lenta demais! Já no Win2K e no WinXP ela imprime normalmente... Alguém sabe o que pode estar acontecendo?


Massuda..

Não foi o que nosso amigo nos informou....

´Estou usando a rotina para impressão direto na porta ´


GOSTEI 0
Massuda

Massuda

14/04/2005

Não foi o que nosso amigo nos informou....
Pelo texto eu entendi que ele está usando AssignFile para abrir a porta da impressora e usando WriteLn para enviar as strings, ou seja, está usando as rotinas bufferizadas de acesso a arquivos texto. Nesse caso, ele não tem como controlar o envio dos dados à impressora (talvez pudesse usar Flush?).

Desculpe-me se eu estiver enganado.


GOSTEI 0
POSTAR