Fórum Deskjet x Canvas - Colunas desalinhadas #220130

12/03/2004

0

Prezado Coloboradores

Estou utlizando o canvas para fazer uma impressão na Deskjet 690c mas o relatório esta sainda desalinhado, isto é, as posiões das colunas não estão saindo corretamente uma abaixo do outro. Testei este mesmo relatóiro numa epson e sai corretamente. Estou utilizando a fonte courier exatamente porque cada caracter ,mesmo espaco, tem o mesmo tamanho.

Ex:

Codigo Descricao Preco
001 MEL 4.99
002 FEIXAO 19.99
003 ARROZ 1.29



É como se a impressora não tivesse interpretando corretamente. Eu testei ate o tamanho da fonte e aumentei e diminui conforme o numero que dei mas o relatorio continua desalinhado.

Segue o codigo abaixo para analise. Fico grato mais uma vez pela colaboração. Marcos Roberto


Printer.Canvas.Font.Name := ´Courier´ ;
Printer.Canvas.Font.Size := 9 ; // antes 9
Printer.Canvas.font.style := [];

Printer.BeginDoc ;
iConta := 0 ;
For iConta := 0 To stConteudo.Count -1 Do
Begin
Printer.Canvas.TextOut(0, iConta *42 , stConteudo.Strings[iConta]);
End;

Printer.EndDoc ;


Marcosrodias

Marcosrodias

Responder

Posts

13/03/2004

Edilcimar

Apesar de vc achar que a impressão sai alinhada com a Epson isto não é verdade pois provavelmente vc imprimiu inicialmente com uma resolução X e sai tudo bem, porém na mesma Epson se vc modificar a resolução verá que sairá tudo errado, portanto vc terá que fazer contas de resolução de impressão para que a cada resolução (independentemente da impressora) tudo saia relativamente igual (sempre poderá haver uma erro de um pixel). Siga o exemplo
IndiceVertical, IndiceHorizontal : Real;
Linha, Coluna : Integer;
IndiceVertical := Printer.PageHeight;
IndiceHorizontal := :Printer.PageWidth;
Dê um showmessage neste dois índices para verificar o valor dos mesmos(apenas a primeira vez) e depois coloque isto como padrão para a impressora em uso, vamos supor que na Epson seja IndiceVeritcal = 1584 e IndiceHorizontal = 960, então ajuste
IndiceVertical := Printer.PageHeight / 1584;
IndiceHorizonta := Printer.PageWidth / 960;
E na hora de imprimir faça
With Printer.Canvas do
begin
Linha := Round(5 * IndiceVertical) -> Note que na impressora original será igual a UM porém com outra resolução este número poderá ser maior ou menor
Coluna := Round(50 * IndiceHorizonta) -> idem aqui
TextOut(Coluna,Linha, ´texto de teste de impressão);
end;
Faça o teste e vc vai verificar que sempre a impressão sairá no mesmo lugar


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar