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 ;
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
Curtir tópico
+ 0
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
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
Clique aqui para fazer login e interagir na Comunidade :)