Primeira impressão LaserJet em modo console

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Primeira impressão LaserJet em modo console

Mensagem por Jairo Maia »

Olá Taciane,
Taciane escreveu:Outra coisa que pensei, se o TXT esta gerando 100%, tanto na primeira quando das demais páginas, talvez pudesse ser algo na função imprime. mas consigo identificar onde.
Se o TXT está correto, com certeza é na Imprime() mesmo. Anexe um exemplo de TXT atual com mais de uma página. Vou tentar entender isso.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Primeira impressão LaserJet em modo console

Mensagem por Taciane »

Olá, Jairo

Obrigada mais uma vez pela disponibilidade em ajudar, e pela paciência.
Anexos
MOVIMENTO_DIARIO.TXT
(7.12 KiB) Baixado 199 vezes
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Primeira impressão LaserJet em modo console

Mensagem por Jairo Maia »

Olá Taciane,

Coloque essa linha:

Código: Selecionar todos

@ pRow() + 1, 0 SAY ""
Acima dessa linha:

Código: Selecionar todos

SET DEVICE TO SCREEN
Ou seja, antes da saida para o video e fechamento do arquivo TESTE.TXT.

A última linha não está sendo lida porque ela não está terminando com quebra de linha, ou seja, não tem o Chr(13)+Chr(10). Acrescentado a linha acima ela passa a ser lida normalmente.

Faça um teste e vamos ver o que mais falta ajustar.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Primeira impressão LaserJet em modo console

Mensagem por Taciane »

Olá,

Agora sim esta gerando corretamente.

Vou fazer mais alguns testes.

Muita obrigada Jairo
:))
Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Primeira impressão LaserJet em modo console

Mensagem por Taciane »

Olá,

Testes feitos, tudo certo com a impressão.

Antes quando o executável era compilado com o Blinker eu usava este recurso aqui e atendia muito bem.

Agora depois que compilei com o HBMK2 não funciona mais, mesmo não tendo usado nenhuma lib gráfica. :-O

Fica uma tela grande preta com fonte Lucida Console -> 28 e a tela do meu programa bem pequena no meio.

https://pctoledo.org/forum/viewto ... =1&t=12015
Tela cheia no Windows 7 igual a que temos no XP impossível.

As opções mais fáceis são:

1. Entrar em propriedades do próprio executável (.exe) e mudar:
fonte = Lucida Console
tamanho = 28

2. Fazer um arquivo .BAT para chamar o programa e no cone dele colocar as mesmas propriedades acima

A janela ocupar praticamente a tela toda, além de que fica visível a barra de tarefas.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Primeira impressão LaserJet em modo console

Mensagem por Jairo Maia »

Olá Taciane,

Veja este tópico: Tela Cheia Usando GTWVT com Windows ou Linux

Quanto a tela preta de fundo, como você inicia seu aplicativo? Usando arquivo .bat ou o ícone aponta diretamente para o executável?
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Primeira impressão LaserJet em modo console

Mensagem por Taciane »

Olá, Jairo

A tela preta de fundo aparece quando tento executar usando o BAT
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Primeira impressão LaserJet em modo console

Mensagem por Jairo Maia »

Taciane, a tela preta é do bat. Isso ocorre porque a janela CMD fica aberta até que ele seja fechado, e é fechado após ser fechado o aplicativo que ele abriu. Aconselho você apontar o ícone diretamente para o arquivo executável.

Porém, se for necessário usar o bat, então configure para que ele abra o aplicativo e não espere e feche, ou seja, não fica esperando o aplicativo concluir. Exemplo:

Código: Selecionar todos

Start /b SeuAplicativo.Exe
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Primeira impressão LaserJet em modo console

Mensagem por Taciane »

Olá, Jairo

Desta forma que você me orientou a tela preta realmente não fica aparecendo. Mas a tela do programa fica pequena mesmo aplicando a conte Lucida Console 28.

Estou vasculhando o Fórum para ver se há outra solução, hoje a noite vou fazer alguns testes iniciais com a GTWVT.

Seguido a sua dica da função imprime consegui acertar outros 5 relatórios, depois de realinhar as colunas ficaram 100%, estou agarrada apenas com o Extrato Provisório nele TXT a cada 63 linha salta-se uma linha e inicia-se uma nova pagina.Fiz vários lançamentos simbólicos e no TXT aparece certo, estou testando com 4 paginas, no PDF logo após a linha 63 vem a informação seguinte se dar o espaço que aparece no TXT.

Jairo sem querer abusar da sua boa vontade ou de qualquer outro colega do fórum, se puder dar uma verificada onde esta o meu erro.
Anexos
EXTRATO_PROVISORIO.TXT
(12.51 KiB) Baixado 189 vezes
Extrato Provisorio - Impressao Pelo Sistema.pdf
(23.17 KiB) Baixado 138 vezes
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Primeira impressão LaserJet em modo console

Mensagem por Toledo »

Taciane, tente fazer a seguinte alteração na função imprime():

PROCURE:

Código: Selecionar todos

   nHandler := FOpen( cArq )

   While HB_FReadLine( nHandler, @cLinha ) = 0

      If "CONTA CORRENTE" $ Upper( cLinha )
        If lPrimeira  // nao abre nova pagina na primeira sequencia
          lPrimeira := .f.
          oPrinter:NewLine()  // pula 1 linha
          oPrinter:NewLine()  // pula + 1 linha
        ElseIf oPrinter:pRow() > 63  // formato A4 tem 69 linhas. Menos 2 do cabeçalho e 2 do rodapé = 65
          oPrinter:NewPage()  // inicia nova pagina
          oPrinter:NewLine()  // pula 1 linha
          oPrinter:NewLine()  // pula + 1 linha
        Else  // cabe na mesma pagina...
         oPrinter:NewLine()  // pula 1 linha
         oPrinter:NewLine()  // pula + 1 linha
        EndIf
      EndIf

      oPrinter:TextOut( HB_OemToAnsi( cLinha ), .t. )

   EndDo
ALTERE por:

Código: Selecionar todos

 nHandler := FOpen( cArq )

 oPrinter:newline()
 While HB_FReadLine( nHandler, @cLinha ) = 0
      t_:=AT(CHR(12)+CHR(13),cLinha)
      If t_>0
          cLinha:=LEFT(cLinha,t_-1)
      EndIf
      oPrinter:TextOut( HB_OemToAnsi( cLinha ), .t. )
      If t_>0
          oPrinter:NewPage()  // inicia nova pagina
          oPrinter:newline()
          oPrinter:newline()
      EndIf
 EndDo
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Primeira impressão LaserJet em modo console

Mensagem por Taciane »

Olá, Toledo e demais colegas

Fiz a alteração mas ficou do mesmo modo, durante os testes fui aumentando este -1 para outros valores somente para ver o efeito no relatório mas sempre fica do mesmo modo.


Veja abaixo como ficou depois a alteração.

Código: Selecionar todos

   nHandler := FOpen( cArq )
 
  oPrinter:newline()
  While HB_FReadLine( nHandler, @cLinha ) = 0
      t_:=AT(CHR(12)+CHR(13),cLinha)
      If t_>0
          cLinha:=LEFT(cLinha,t_-1)
      EndIf
      oPrinter:TextOut( HB_OemToAnsi( cLinha ), .t. )
      If t_>0
          oPrinter:NewPage()  // inicia nova pagina
          oPrinter:newline()
          oPrinter:newline()
      EndIf
 EndDo
   
   oPrinter:EndDoc()
   oPrinter:Destroy()
   
 ENDIF
RETURN NIL
Anexos
Extrato Provisorio.pdf
(18.17 KiB) Baixado 147 vezes
EXTRATO_PROVISORIO.TXT
(4.16 KiB) Baixado 244 vezes
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Primeira impressão LaserJet em modo console

Mensagem por Jairo Maia »

Olá Pessoal,

Taciane, vejo que você usa um critério que é colocar 3 asteriscos para destacar o nome da empresa no extrato, por exemplo:

Código: Selecionar todos

*** COMERCIAL BEIRA RIO ***
Então vou usar isso para estabelecer a quebra de página, considerando que isso seja um critério que será usado nos extratos. Então, na função imprime que passei procure esta linha:

Código: Selecionar todos

If "CONTA CORRENTE" $ Upper( cLinha )
E altere dessa forma:

Código: Selecionar todos

If "CONTA CORRENTE" $ Upper( cLinha ) .Or. "***" $ cLinha
Faça o teste e veja se vai funcionar.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Primeira impressão LaserJet em modo console

Mensagem por Taciane »

Olá, Jairo

Não deu certo não.

Espero que não se importe, vou postar o fonte talvez seja algo na geração do TXT.

Vendo a alteração do Toledo, fui pesquisar e achei o tópico abaixo do asimoes
viewtopic.php?f=4&t=13604

Tentei usar a função mencionada por ele mas permaneceu a mesma coisa no PDF

Código: Selecionar todos

*EMITIR EXTRATO PROVISORIO        

#define WIN_DMPAPER_A4 9

CLEAR
mlinha     = 66
mconta     = SPACE(5)
msal_ini   = 0.00
mdat_ini   = CTOD('  /  /  ')
mdata      = CTOD('  /  /  ')
mdat_sal   = CTOD('  /  /  ')
mpag       = 1 
USE CLIENTES INDEX ICLIENTE
SELECT 2
USE MOVIM   INDEX IMOVIM 
SELECT 3
USE HISTOR INDEX IHISTOR

DO WHILE .T.
 mconta = SPACE(5)
 CLEAR 
 @3,10  SAY 'C O N T A  C O R R E N T E'
 @4,10  SAY 'EXTRATO PROVISORIO'
 @08,08 TO 15,47 DOUBLE  
 @10,10 SAY 'INFORME CONTA'
 @18,10 SAY '99999 PARA ENCERRAR' 
 @10,34 GET  mconta
 READ
 IF mconta = '99999'
  CLOSE ALL      
  CLEAR    
  RETURN
 ENDIF
 SELECT 1
 SEEK mconta
 IF EOF()
  @22,1 SAY 'CONTA NAO CADASTRADA'
  WAIT ', ENTER'
  LOOP
 ELSE
  EXIT
 ENDIF
ENDDO

SELECT 2
SEEK mconta
IF EOF()
 @22,1 SAY 'CONTA SEM MOVIMENTO'
 WAIT ', ENTER PARA CONTINUAR'
ELSE 

 @12,10 SAY 'INFORME DATA DE INICIO'
 @12,34 GET mdata 
 READ
ENDIF
   SET PRINTER TO EXTRATO_PROVISORIO.TXT
    SET DEVICE TO PRINT
     cARQ := DiskName()+":\"+CurDir()+"\EXTRATO_PROVISORIO.TXT"
                               
SELECT 1
CLEAR
						   
CAB()
msal_ini = SAL_INI
mdat_sal = DAT_INI

SELECT 2
DO WHILE mconta = CONTA .AND. DATA < mdata .AND. .NOT. EOF() 
 IF CT < 10
  msal_ini = msal_ini - VALOR
 ELSE
  msal_ini = msal_ini + VALOR
 ENDIF
 mdat_sal = DATA
 SKIP
ENDDO
SET CENTURY ON
@6,1  SAY mdat_sal 
@6,13 SAY 'SALDO ANT.'
IF msal_ini < 0.00
 @6,39 SAY -msal_ini PICTURE '9,999,999,999.99D'
ELSE
 @6,39 SAY  msal_ini PICTURE '9,999,999,999.99C'
ENDIF

SELECT 2
DO WHILE mconta = CONTA .AND. .NOT. EOF()

 @mlinha,1 SAY DATA 
 mdat_sal = DATA
 mct = CT
 SELECT 3
 SEEK mct
 IF EOF()
   @22,1  SAY 'CODIGO DE TRANSACAO INEXISTENTE,'
   @22,32 SAY mct PICTURE '99'
   WAIT ', ENTER PARA ENCERRAR'
   CLOSE ALL       
   RETURN
 ENDIF

 @mlinha,13 SAY HISTORICO
 SELECT 2
 @mlinha,25 SAY DOC
 @mlinha,39 SAY VALOR PICTURE '9,999,999,999.99'
 IF CT < 10
  msal_ini = msal_ini - VALOR
  @mlinha,55 SAY 'D'
 ELSE
  @mlinha,55 SAY 'C'
  msal_ini = msal_ini + VALOR
 ENDIF
 
 mlinha = mlinha + 1 
  IF mlinha > 63
     SELECT 1
   CAB()
     SELECT 2
 ENDIF
 SKIP
 
ENDDO


@mlinha,1  SAY mdat_sal 
@mlinha,13 SAY 'SALDO ATUAL'
IF msal_ini < 0.00
 @mlinha,39 SAY -msal_ini PICTURE '9,999,999,999.99D'
ELSE
 @mlinha,39 SAY  msal_ini PICTURE '9,999,999,999.99C'
ENDIF
SET CENTURY OFF    
	
  	@ pRow() + 1, 0 SAY ""                 
       SET DEVICE TO SCREEN
         SET PRINTER TO
          CLOSE ALL
           Imprime( "EXTRATO_PROVISORIO.TXT" )  // envia para impressão - 			  
							  
RETURN 
  
 
FUNCTION CAB()
@1,01 SAY '*** TESTE - MEU CABECALHO *** - EXTRATO PROVISORIO'
@1,65 SAY 'PAGINA'
@1,72 SAY mpag PICTURE '99'
mpag = mpag + 1 
@2,09 SAY 'CONTA :'
@2,17 SAY CONTA
@2,23 SAY '-'
@2,25 SAY NOME
@4,03 SAY 'DATA'
@4,13 SAY 'HISTORICO'
@4,25 SAY 'DOCUMENTO'
@4,39 SAY 'V A L O R'
@5,1  SAY REPLICATE('-',78)
mlinha = 7   

RETURN
 
******************************************
Function Imprime_EXTRATO_PROVISORIO ( cArq )
******************************************
local nHandler, cLinha
local oPrinter, lPrimeira:=.t.

If Empty( cArq ) .Or. !File( cArq )
 Hb_Alert( "Arquivo de impressao nao encontrado!" )
 Return Nil
EndIf

cPrinter := WIN_PRINTERGETDEFAULT()
If Empty( cPrinter )
 Hb_Alert( "Nenhuma impressora Instalada!" )
 Return Nil
EndIf

oPrinter := win_prn():New(cPrinter)

oPrinter:Landscape := .F.
oPrinter:FormType  := WIN_DMPAPER_A4  // Formato A4
oprinter:SetPrintQuality(-1) // qualidade da impressao

oPrinter:Copies    := 1

oPrinter:Create()
IF !oPrinter:Create()
   Hb_Alert( "ATENÇÃO!!! Não foi possível Iniciar a Impressão, Favor Verificar se a Impressora esta Ligada." )
   return 
ELSE
   IF !oPrinter:StartDoc("Extrato Provisorio - Impressao Pelo Sistema")
      Hb_Alert( "ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar o Spoll da Impressora" )
      Return 
   endif
   
   oPrinter:SetFont("Courier New",10,{ 1, 16 }) // Comprime em 16 caracteres por polegada
   
   nHandler := FOpen( cArq )

   While HB_FReadLine( nHandler, @cLinha ) = 0

      If "CONTA CORRENTE" $ Upper( cLinha ) .Or. "***" $ cLinha
        If lPrimeira  // nao abre nova pagina na primeira sequencia
          lPrimeira := .f.
          oPrinter:NewLine()  // pula 1 linha
          oPrinter:NewLine()  // pula + 1 linha
        ElseIf oPrinter:pRow() > 63  // formato A4 tem 69 linhas. Menos 2 do cabeçalho e 2 do rodapé = 65
          oPrinter:NewPage()  // inicia nova pagina
          oPrinter:NewLine()  // pula 1 linha
          oPrinter:NewLine()  // pula + 1 linha
        Else  // cabe na mesma pagina...
         oPrinter:NewLine()  // pula 1 linha
         oPrinter:NewLine()  // pula + 1 linha
        EndIf
      EndIf

      oPrinter:TextOut( HB_OemToAnsi( cLinha ), .t. )

   EndDo
   
   oPrinter:EndDoc()
   oPrinter:Destroy()
   
ENDIF
RETURN NIL
Anexos
EXTRATO_PROVISORIO.TXT
(4.21 KiB) Baixado 165 vezes
Extrato Provisorio.pdf
(18.18 KiB) Baixado 199 vezes
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Primeira impressão LaserJet em modo console

Mensagem por Jairo Maia »

Olá Taciane,

Você alterou o nome da função para imprimir o extrato. Veja:

Código: Selecionar todos

Function Imprime_EXTRATO_PROVISORIO ( cArq )
Mas não alterou a chamada. Veja:

Código: Selecionar todos

Imprime( "EXTRATO_PROVISORIO.TXT" )  // envia para impressão
Então basta trocar a linha acima por essa:

Código: Selecionar todos

Function Imprime_EXTRATO_PROVISORIO( "EXTRATO_PROVISORIO.TXT" )
Nota: Se tentar compilar o exemplo acusa função Imprime() não encontrada, mas como provavelmente você está testando com o aplicativo então quem está imprimindo é a função Imprime() e não Imprime_EXTRATO_PROVISORIO().

Nota1: Testei a função Imprime_EXTRATO_PROVISORIO() com seu .TXT e funcionou corretamente. Tente corrigir e faça o teste novamente.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Primeira impressão LaserJet em modo console

Mensagem por Toledo »

Taciane, montei um exemplo com as alterações da minha mensagem anterior.

Em anexo segue o código fonte (PRG) e também o executável, mas renomear o arquivo TESTE_IMP.EX_ para TESTE_IMP.EXE.

Abraços,
Anexos
teste_imp.zip
ATENÇÃO: renomear o arquivo teste_imp.ex_ para teste_imp.exe
(797.69 KiB) Baixado 208 vezes
teste_imp.prg
(1.75 KiB) Baixado 195 vezes
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Responder