Impressão Matricial x Laser - Mudança de página

07/01/2010

4

Caros Colegas,

Estou com uma dúvida muito "cruel" a respeito do tamanho da pagina ao imprimir em LASER (Papel A4) ou na impressora matricial.
Deixa passar as coordenadas de como estou fazendo,

Uso o rvsystem mais ou menos assim:
Procedure TForm1.rvsystem1Print(Sender: TObject);
Var Lin, Pag : Integer;
begin
   with RvSystem1.BaseReport do
   Begin
      FontName:='Courier New'; //define o tipo de fonte
      fontsize:=7;    //defini o tamanho da fonte
      Lin := 64; //Defino o tamanho máximo da página, para que na primeira entrada o cabeçalho seja impresso
      pag := 0;
      cdsLanCheques.First;
      While Not cdsLanCheques.Eof do
      Begin
         If (lin >= 63)  Then //Caso a linha seja maior que 63 vai imprimir o cabeçalho
         Begin
            if Pag >= 1 Then //Se a pagina for igual ou maior que 1 terá quebra de pagina
            Begin
               println('+Continua------------------------------------------------------------------+');
               NewPage;
               SetFont('Courier New',7);
            end;
            Inc(Pag);
            Lin := 0;
            Println('+==========================================================================+');
            Println('|Relacao de cheques enviados para: '+AcrescEspaco(txtDestino.Text,40,'D')+'|');
            println('|Data do envio: '+formataData(deEnvio.Date)+'    Hora emissao do relatorio: '+FormataHora(now)+' Pagina: '+IntToStr(Pag) +'|');
            println('|==========================================================================|');
            println('|Clien|       E m i t e n t e        |Bco| No Cheque| Deposito | V a l o r |');
            println('|--------------------------------------------------------------------------|');
         end;

         println('|'+AcrescEspaco(cdsLanChequesCliente.AsString,5,'E')+'|'+
              AcrescEspaco(cdsLanChequesEmitente.AsString,30,'D')+'|'+
              cdsLanChequesBanco.AsString+'|'+
              AcrescEspaco(cdsLanChequesCheque.AsString,10,'D') +'|'+
              formataData(cdsLanChequesDataDepo.AsDateTime)+'|'+
              AcrescEspaco(Formatar_valores(cdsLanChequesValorCh.AsFloat),10,'E')+' |');
         Inc(Lin);
         cdsLanCheques.Next;
      end;
      println('|--------------------------------------------------------------------------|');
      println('| Qtde cheques: '+AcrescEspaco(stQuant.Caption,3,'E')+RepeteChar(' ',36)+
          ' Total: |'+AcrescEspaco(stTotalCh.Caption,10,'E')+' |');
      println('|==========================================================================|');

   End;
end;
No bottão imprimir:

   RvSystem1.SystemPrinter.MarginBottom  := 1;
   RvSystem1.SystemPrinter.MarginLeft    := 0.3;
   RvSystem1.SystemPrinter.MarginTop     := 1;
   RvSystem1.SystemPrinter.MarginBottom  := 1;
   RvSystem1.SystemPrinter.Units         := unCM;
   RvSystem1.SystemPrinter.UnitsFactor   := 2.54;
   rpDev.SelectPaper('Letter',false);
   rvsystem1.SystemSetups := [];
   rvsystem1.Execute;

O problema é o seguinte, depois que visualizo o arquivo, tenho a opção de imprimir na impressora
LASER ou Matricial, só que se eu colocar If (lin >= 63) o tamanho da folha fica pequeno na impressora laser e se caso eu usar o comando
         ...........
         If (LinesLeft=0 ) Then
         Begin
            if Pag = 1 Then
            Begin
               println('+Continua------------------------------------------------------------------+');
               NewPage;
               SetFont('Courier New',7);
            end;o 
             .....
e mandar na impressora matricial fica grande.

Não sei se entenderam, mas se quiserem mais alguma informação é só postar.

Grato.
Responder

Posts

25/03/2011

Dirceu Morais


Pessoal ainda não consegui resolver o problema que mencionei se alguém souber me ajudar ficarei grato.

Ps.
Talvez tenha algum outro modo de fazer isto.

Só lembrando que preciso de GERAR UM RELATÓRIO NO VIDEO.
E depois escolher a impressora (Matricial ou Jato Tinta/Laser)
Quando escolho jato de tinta (laser) sem problemas nenhuma, o problema é quando escolho Matricial, que tem a quebra de página.



Responder

25/03/2011

Nilton Souza

Olá Dirceu, tudo bem?
Percebi que você está fazendo o relatório no "braço"...
Já pensou em escrever direto para a porta LPT?
Veja este trecho de código que eu usava para imprimir NOTAS FISCAIS (antes da NFe hehehe):

var  Prn: TextFile;
begin
  ...
  AssignFile(Prn, 'LPT1');
  {$I-}
  Rewrite(Prn);
  {$I+}
  if IOResult = 0 then
  begin
    try
      // Inicializa Impressora
      Write(Prn, #27#64);

      // Espaçamento entre linhas: 2 = default (range: 0-2)
      Write(Prn, #27#45 + '1');

      // Underline - OFF
      Write(Prn, #27#45 + '0'); // 1 -> para ligar

      // Tamanho da página
      Write(Prn, #27#67 + '65'); // Número de linhas

      // Fonte Reduzida (12 CPI)
      Write(Prn, #27#77);

      // Fonte Normal
      // Write(Prn, #27#80);

      // Italic - OFF
      Write(Prn, #27#53); // 52 p/ ligar

      // Condensad - OFF
      Write(Prn, #18); // 15 p/ ligar

      // Expanded - OFF
      Write(Prn, #27#87#0); // 1 p/ ligar

      // Bold - ON
      Write(Prn, #27#69); // 70 p/ desligar

      // Pula 3 linhas      for Lin := 1 to 3 do WriteLn(Prn, '');

      WriteLn(Prn, FmtVal('                                                           £           £            ££££££',
        [
         UnitGlobalDoProjeto.ifthen(chk_entrada.Checked, 'X', ''),
         UnitGlobalDoProjeto.ifthen(chk_entrada.Checked, '', 'X'),
         FGS_FormataInt(StrToInt(edt_nota_fiscal_id.Text), 6)
        ]));

      for Lin := 1 to 5 do WriteLn(Prn, '');

      WriteLn(Prn, FmtVal('££££££££££££££££££££££££££££££££ £££££ £££££££££££££££££££',
        [
        MTO_BuscaValidador('edt_cfop').MGS_ValorDoCampoBusca('cfop_descricao'),
        MTO_BuscaValidador('edt_cfop').MGS_ValorDoCampoBusca('cfop_id'),
        '' // INSC. ESTADUAL DO SUBSTITUTO TRIBUTÁRIO
        ]));
      ...
      // Ejetar a página      Write(Prn, #12);
    finally      CloseFile(Prn);    end;  end;end;
obs.:   1) usei isso por anos na impressão de notas fiscais de um sistema meu (funciona "bonitinho")  2) a função FmtVal eu criei para facilitar o posicionamento no formulário (se quiser te passo ela).
Responder

28/03/2011

Dirceu Morais

Nilton valeu,

Mas minha intenção é a seguinte, quando o usuário pedir pra imprimir, primeiro quero que ele visualize o que vai ser impresso. Depois ele decide se vai mandar pra impressora ou não. E quando ele mandar pra impressora, ele terá a opção de escolher se vai imprimir em uma matricial ou em uma laser (ainda tenho a opçao de mandar por email, pdf, doc, txt).

Meu problema é que se eu preparo o arquivo pra Laser, e na visualização e na hora de imprimir mudo para impressora Matricial a mudança de página não bate como a visualização pois o tamanho das páginas são diferente.
Se eu fizer o contrário preparar pra matricial e imprimir na laser até que não dá tanto problema (Mas tbém não sai 100%).

Com relação a função que vc criou se puder me mandar fico grato. digitosistemas@yahoo.com.br





Responder

28/03/2011

Dirceu Morais

Obrigado pela ajuda a todos que leram e quebraram a cabeça comigo.

Acho que consegui resolver (Não ficou 100% - mas melhorou bastante),  fiz alguns testes e funcionou.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira