Fórum Tprinter, preciso de uma solução... #322650

01/06/2006

0

amigos é o seguinte

Preciso imprimir um orçamento, em um papel do tamanho 210 x 140
configurei no windowsxp uma impressora com o tamanho do papel personalizado, tentei com o quickreport e nao consegui que a impressora fosse ate o picote para destacar a folha entao peguei um exemplo do Edilcimar sobre Tprinter achando que ia resolver o problema, no exemplo dele se eu seleciono uma impressora com o tamanho de papel igual a carta ou A4 ele salta normal ate o picote, mas o que eu preciso é usar o papel personalizado 210 x 140 mas nele a impressora nao vai ate o picote.

ja procurei em tudo não encontrei nada, eu preciso de uma solução se alguem tiver uma dica de componente ou usando o proprio Tprinter eu agradeço muito.

Delphi 7.0
Firebird 1.5
ja tentei na Lx-300 e na lx-300+

O que eu preciso é que a impressora va ate o picote, no papel personalizado pra eu destacar a folha.

O exemplo que peguei do Edilcimar é esse sera que fiz algo errado?


procedure TFOrcamento.ImprimirClick(Sender: TObject);
Var
Linha, Coluna, Quantidade : Integer;
IndiceHorizontal, IndiceVertical, Total, TotalGeral : Real;
Codigo : String;
Begin
With IBQimprime do
  begin
  close;
  sql.Clear;
  sql.Add(´ Select orcamento.*, orcamentodet.*, empresa.fantasia, empresa.fone, atendente.nome ´ +
  ´ from orcamento ´ +
  ´ left join orcamentodet on orcamento.id = orcamentodet.idorcamento ´+
  ´ left join empresa on orcamento.idempresa = empresa.id ´ +
  ´ left join atendente on orcamento.idatendente = atendente.id ´+
  ´ where orcamento.id = ´ + QuotedStr(DBEdit2.Text));
  open;
  end;

Imprimir.Enabled := False; 
Cursor := crHourGlass; 
IndiceHorizontal := Printer.PageWidth / 960;
IndiceVertical := Printer.PageHeight / 792;
Printer.canvas.font.Name := ´Arial´;
Printer.Orientation := poPortrait; 
Printer.BeginDoc; 
Linha := 0;
Quantidade := 0;
TotalGeral := 0; 
With IBQimprime do
  Begin
  First; 
  While not eof do // para imprimir toda a tabela
    Begin
    With Printer.Canvas do 
      Begin
      If Linha = 0 then 
        Begin
        Printer.canvas.font.Name := ´Monotype Corsiva´;
        Printer.canvas.font.style:=[fsitalic];
        Font.Size := 20;
        Coluna := Round(15 * IndiceHorizontal);
        TextOut(Coluna, Linha, IBQimprimeFANTASIA.text);
        Coluna := Round(720 * IndiceHorizontal);
        TextOut(Coluna, Linha, DateToStr(Now)); 
        Linha := Linha + Round(23 * IndiceVertical);
        Coluna := Round(250 * IndiceHorizontal);
        Printer.canvas.font.Name := ´Arial´;
        Printer.canvas.font.style:=[];
        Font.Size := 20; 
        TextOut(Coluna, Linha, ´Emissao do Orçamento ´); 
        Linha := Linha + Round(28 * IndiceVertical);
        Font.Size := 9;
        Coluna := 0;
        TextOut(Coluna, Linha, ´CÓDIGO´); 
        Coluna := Round(90 * IndiceHorizontal);
        TextOut(Coluna, Linha, ´QUANT´);
        Coluna := Round(170 * IndiceHorizontal);
        TextOut(Coluna, Linha, ´VALOR´); 
        Linha := Linha + (Round(25 * IndiceVertical));
        End;
      Coluna := 0;
      Codigo := IntToStr(IBQimprimeIDPRODUTO.Value);
      TextOut(Coluna, Linha, Codigo);
      Coluna := Round(90 * IndiceHorizontal);
      TextOut(Coluna, Linha, floattostr(IBQimprimeQTDE.Value)); 
      Total := IBQimprimeTOTAL1.Value; 
      TotalGeral := TotalGeral + Total; 
      Quantidade := Quantidade + 1; 
      Coluna := Round(170 * IndiceHorizontal);
      TextOut(Coluna, Linha, FloatToStrF(Total, ffFixed, 10, 2));
      Linha := Linha + Round(20 * IndiceVertical);
      If Linha >= 600 then 
        Begin
        Linha := 0; 
        Printer.NewPage;
        End;
      End;
    IBQimprime.Next;
    End;
  End;
Printer.Canvas.Font.Size := 10; 
Linha := Linha + Round(25 * IndiceVertical);
If Linha > 600 then 
  Printer.NewPage;
Coluna := 0;
Printer.Canvas.TextOut(Coluna, Linha, ´QUANTIDADE TOTAL DE ÍTENS: ´ + IntToStr(Quantidade));
Linha := Linha + Round(25 * IndiceVertical);
Printer.Canvas.TextOut(Coluna, Linha, ´VALOR TOTAL: ´ + FloatToStrF(TotalGeral, ffCurrency, 10, 2));
Printer.EndDoc;
Cursor := crDefault;




Desde ja agradeço


Obrigado!!!


Marcusbraga

Marcusbraga

Responder

Posts

01/06/2006

Edilcimar

A numeração fornecida em ´indicehorizontal´ e ´indicevertical´ é dada pelo tamanho da página selecionada, se vc colocar um printersetupdialog e escolher o tamanho do papel desejado antes de imprimir, então este valor será válido para toda a impressão, ou seja este valor vai variar de acordo com o tamanho do papel e de acordo com a resolução da impressora. Para verificar estes valores faça o seguinte:
PrinterSetupDialog1.Execute;
ShowMessage(IntToStr(Printer.PageHeight)+#13+10+IntToStr(Printer.PageWidth));
Faça diversos testes mudando o tamanho da página e a resolução da impressora e verá que estes valores vão variar. Após os testes, selecione o tamanho da página desejada e uma resolução QUALQUER e use isto como padrão para este programa, depois coloque aquilo que você já utilizou
IndiceHorizontal := Printer.PageWidth / 960;
IndiceVertical := Printer.PageHeight / 792;
substituindo os valores 960 e 792 pelos valores encontrados


Responder

Gostei + 0

02/06/2006

Marcusbraga

Edilcimar, essa parte eu entendi sao esses valores que achei 960 largura e 792 a altura a resolução é 120X144 isso ta certo.

Não sei se o problema é da epson Lx-300, o auto-tear-off (avança o papel ate o picote) da impressora ta ligado, fiz testes com tamanhos personalizados, a impressora só avança o papel ate o picote quando a altura (height) é maior que 27 cm, mas a altura que quero do papel tem que ser com 13,97 (papel do tipo formulario meia folha).


alguem usa esse tipo de papel e funciona normal, ou o problema ta aqui?

se eu usar o (writeln) sei que consigo parar em qualquer lugar mas preciso voltar a folha para imprimir o proximo orçamento)
aceito sugestoes de outros componentes se ouver algum geito se alguem ja passou por isso por favor peço ajuda.


espero que tenha sido claro na minha duvida.


desde ja agradeço...


Responder

Gostei + 0

02/06/2006

Edilcimar

Estes valores que vc conseguiu foi com que tamanho de papel? O personalizado? Se não foi então personalize o tamanho antes de pegar estes valores, caso tenha pego isto após personalizar, então vá na configuração da impressora e coloque o skip over perfuration para off (isto é feito no setup da impressora), no caso da Epson, dependendo do modelo é feito através de micro chaves, e em outras via configuração na hora de ligar a mesma com um dos botões apertados.


Responder

Gostei + 0

02/06/2006

Marcusbraga

Edilcimar, obrigado pela atenção!

respondendo as suas perguntas o papel ta com os valores q eu tirei do papel personalizado que configurei nas configurações do servidor do win xp tamanho é largura = 21,00cm e altura = 13,97cm e os resultados foram 960 e 792.

fiz outros testes desconsiderei tudo e apenas coloquei

Printer.Begindoc;
Printer.EndDoc;

com o papel personalizado
largura = 21,00 e altura = 27,94 (ou qualquer valor acima de 27,00cm)ele ejeta o papel ate a proxima pagina(27,94cm), da uma ´paradinha´, e avança até o picote para destacar a folha.

com papel personalizado
largura = 21,00 e altura = 13,97 ele ejeta o papel ate a proxima pagina(13,97cm) e para. Não avança ate o picote

as configurações da impressora (Epson Lx-300) estao assim

Caracter spacing 10cpi
shape of zero 0
skip-over-perfuration Off (ja tentei ON)
caracter table PC 865
Auto line feed ON (ja tentei Off)
Page Lenght 70/6 A4 (Ja tentei 11, 12 e 8.5 inches)
Auto-Tear-Off ON (ja tentei off)
Tractor Single
Interface Auto selection (10 sec.)
Bit rate 9600 bps
Parity None
Data Lenght 8 bit
ETX/ACK OFF


Uma pergunta voces ja usaram esse tipo de papel e funciona normal o avanço até o picote???

desde ja agradeço...


Responder

Gostei + 0

02/06/2006

Edilcimar

Eu já utilizei uma vez para um cliente que tinha uma NF personalizada com tamanho totalmente fora do padrão e funcionou, na página do cliente eu tinha 1868/960!


Responder

Gostei + 0

02/06/2006

Marcusbraga

Como eu disse quando a altura é maior que (27,94x21,00) equivalente a (1584x960) funciona normal que é o seu caso (1868x960) q deve ser aproximadamente (30,50x21,00) o problema acontece quando a altura é menor que isso tipo no meu caso (792x960) equivalente a (13,97x21,00)

entendeu a questao


mas mesmo assim agradeço sua atenção.

Obrigado.....


Responder

Gostei + 0

02/06/2006

Edilcimar

Vou fazer um teste aqui no final de semana e depois retorno, tenho alguns boletos bancários (são bem curtos) e com eles deve dar para testar!


Responder

Gostei + 0

03/06/2006

Edilcimar

Eu não sei o que aconteceu com o meu windows! Eu não consigo ter uma página personalizada( coisa que eu tinha antigamente), não consigo escolher nenhum tipo de tamanho de papel a não ser alguns previamente selecionados pelo xp. os quais estão variando de acordo com o tipo de impressora! Já testei isto anteriormente e agora nem ao menos consigo selecionar NENHUM tipo de folha personalizada!


Responder

Gostei + 0

05/06/2006

Marcusbraga

Amigos, resolvido o problema.


O problema era com o driver da impressora, os papeis disponiveis para
lx-300 (isso não ocorre com lx-300+) no driver do winxp são limitados por isso quando configurava um papel com a altura menor q 27,94 (carta) o avanço de papel até o picote nao respondia, peguei um driver genérico no site da epson e esse sim oferece suporte a diversas configurações de papel e com ele funcionou normal, para quem interessar o driver ´CI_9PINOS_W319XMENTX.EXE´ se encontra aqui [url]http://www.suporte-epson.com.br/ [/url] para a instalação é pedido algumas dlls nao encontrada no xp essas dlls voces vao encontrar aqui [url]ftp://ftp.microsoft.com/services/whql/tools/nstl/000316/hct/wolfpack/drivers/nt4/x86/[/url].

espero que sirva pra alguem.


Edilcimar, agradeço muito pela sua ajuda, aprendi muito pesquisando pelo forum e lendo suas respostas, principalmente sobre Tprinter.

Obrigadoooooooo!!!


Responder

Gostei + 0

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

Aceitar