Clipper On Line • Ver Tópico - Imprime apenas 1 pagina

Imprime apenas 1 pagina

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

Moderador: Moderadores

 

Imprime apenas 1 pagina

Mensagempor EDSON MONTRESOR » 01 Fev 2018 22:59

Caros companheiros, boa noite.

Estou apelando a vocês pois não consegui resolver o problema (Pura ferrugem depois de muito tempo parado).

Pesquisei aqui no fórum e localizei a rotina de impressão abaixo, gerei o relatório em arquivo texto, controlei via programa o EJECT, porem, só imprime 1 pagina.

Poderiam me informar onde estou errando.

FUNCTION SELPRINT(PRELATO)
Local eol := Chr(13) + Chr(10), cCupom, nPrn, aPrn := Win_PrinterList()

#define FORM_A4 9
REQUEST hb_CodePage_PTISO
Set( _SET_CODEPAGE, "PTISO" )

 
do While nPrn != 0
@ 1, 0 SAY "Selecione a impressora:"
@ 2, 0 TO MaxRow(), MaxCol()
nPrn := AChoice( 3, 1, MaxRow() - 1, MaxCol() - 1, aPrn, .T.,, nPrn )

IF nPrn != 0
  PrintWinPrn( PRELATO , aPrn[ nPrn ] )
Endif
EndDo
   
Clear Screen
   
eturn Nil
   
Function PrintWinPrn( cArq, cPrint )
Local oPrn, aPrn := GetPrinters(), n := 0
   
oPrn := Win_Prn():New(cPrint)
oPrn : LandScape := .F.
oPrn : FormType  := FORM_A4
oPrn :Copies := 1
oPrn :CharSet(255)
oPrn:SetFont('courier new',17,{1,17}, 0,.F.,.F.)
   
If !oPrn:Create()
Alert("Nao foi criado o documento de Impressao")
Return nil
EndIf
   
If !oPrn:StartDoc("Imprimindo Documento")
Alert("Erro na Impressora")
Return nil
EndIf
 
HB_CDPSelect("PT850")
   
SetPrc(0,0)
cText := MemoRead( cArq )
nLinh := MlCount( cText )
For n := 1 to nLinh
*TERM1(N,NLINH,19)
oPrn:TextOut(HB_AnsiToOem(MemoLine(cText,,n)),.t.)
Next
oPrn:EndDoc()
   
HB_CDPSelect( "PTISO")
   
Return .t.
Nota de Moderação:
Toledo: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: Clique aqui
EDSON MONTRESOR
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 11
Data de registro: 23 Jan 2018 20:59
Cidade/Estado: MATAO / SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

IMPRIME APENAS 1 PAGINA

Mensagempor EDSON MONTRESOR » 01 Fev 2018 23:04

Segue o arquivo TXT
Anexos
RELFOR.txt
(276.41 KiB) Baixado 38 vezes
EDSON MONTRESOR
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 11
Data de registro: 23 Jan 2018 20:59
Cidade/Estado: MATAO / SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

IMPRIME APENAS 1 PAGINA

Mensagempor JoséQuintas » 02 Fev 2018 09:39

Numa pesquisa rápida da win_prn(), encontra-se um método NewPage(). Isso te diz alguma coisa?

winprn.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

IMPRIME APENAS 1 PAGINA

Mensagempor alaminojunior » 02 Fev 2018 10:46

método NewPage(). Isso te diz alguma coisa?


Exatamente.
O controle de páginas você mesmo precisa fazer.
Naquele laço For ... Next você precisa controlar o número de linhas impressas, segundo a resolução da impressora, tamanho de fontes, etc ... e ao chegar no final da folha ou próximo, você envia o método de nova página zerando o parâmetro de linha.

Win32Prn é uma classe muito poderosa. Entendendo a mesma e sabendo usar, dá pra fazer um estrago.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar de usuário

alaminojunior
Colaborador

Colaborador
 
Mensagens: 1689
Data de registro: 16 Dez 2005 20:26
Cidade/Estado: Ubatuba - SP
Curtiu: 27 vezes
Mens.Curtidas: 11 vezes

IMPRIME APENAS 1 PAGINA

Mensagempor EDSON MONTRESOR » 02 Fev 2018 13:56

Desculpem, mas eu havia entendido que o controle de páginas poderia ser feito na construção do arquivo ".txt", e nele, inseri o comando EJECT ao final de cada pagina.

Obrigado pelas dicas e vou rever o programa.
EDSON MONTRESOR
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 11
Data de registro: 23 Jan 2018 20:59
Cidade/Estado: MATAO / SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

IMPRIME APENAS 1 PAGINA

Mensagempor Toledo » 02 Fev 2018 15:13

Edson, dê uma olhada neste arquivo que está na seção Download aqui do fórum:

Visualizando relatórios - Console + HwGui

No arquivo open_rel.prg procure pela função Imprime_hb(). Nesta função tem controle para relatórios com várias páginas.

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
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Imprime apenas 1 pagina

Mensagempor EDSON MONTRESOR » 02 Fev 2018 15:24

Obrigado mais uma vez
EDSON MONTRESOR
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 11
Data de registro: 23 Jan 2018 20:59
Cidade/Estado: MATAO / SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Imprime apenas 1 pagina

Mensagempor EDSON MONTRESOR » 03 Fev 2018 11:11

Caros colegas, bom dia!

O grande auxilio do Toledo já me foi muito mais que suficiente para o que eu queria.

Mas a titulo de matar minha curiosidade, gostaria de saber o seguinte:

Quando gerei o arquivo "relfor.txt" adicionei os EJECTs ao fim de cada pagina e repeti o cabeçalho do relatório no inicio da nova pagina.

Quando edito o "relfor.txt", existe a indicação de fim de página.

Entendo que o laço FOR / NEXT lê linha-a-linha do arquivo "relfor.txt" e nesta situação, no programa acima, daria para EJETAR a pagina ao encontrar a indicação de fim de pagina no arquivo ?

Obrigado
EDSON MONTRESOR
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 11
Data de registro: 23 Jan 2018 20:59
Cidade/Estado: MATAO / SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Imprime apenas 1 pagina

Mensagempor alaminojunior » 03 Fev 2018 11:27

Entendo que o laço FOR / NEXT lê linha-a-linha do arquivo "relfor.txt" e nesta situação, no programa acima, daria para EJETAR a pagina ao encontrar a indicação de fim de pagina no arquivo ?

A classe Win32Prn não interpreta assim.

O comando EJECT funciona enviando um chr(12) para a impressora, zerando as coordenadas de linha e coluna, ejetando a página.
Na Win32Prn para começar ela não entende muito bem de linhas e colunas, mas sim de píxels.
Portanto o controle está contigo.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar de usuário

alaminojunior
Colaborador

Colaborador
 
Mensagens: 1689
Data de registro: 16 Dez 2005 20:26
Cidade/Estado: Ubatuba - SP
Curtiu: 27 vezes
Mens.Curtidas: 11 vezes

Imprime apenas 1 pagina

Mensagempor EDSON MONTRESOR » 03 Fev 2018 16:08

Partindo do principio que antes da impressão, a função esta lendo um arquivo TEXTO, fiz a seguinte alteração e aparentemente deu certo:



    cText := MemoRead( cArq )
    nLinh := MlCount( cText )
    For n := 1 to nLinh

      oPrn:TextOut(HB_AnsiToOem(MemoLine(cText,85,n)),.t.)

      cLinha := memoline( cText, 85 , n, 1, .F. )

    if  chr(12) $ clinha
       oPrn:newpage()
    endif

    Next

EDSON MONTRESOR
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 11
Data de registro: 23 Jan 2018 20:59
Cidade/Estado: MATAO / SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Imprime apenas 1 pagina

Mensagempor EDSON MONTRESOR » 03 Fev 2018 16:11

alaminojunior, obrigado, pois a sua citação do chr(12) me fez tentar esta alternativa....
EDSON MONTRESOR
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 11
Data de registro: 23 Jan 2018 20:59
Cidade/Estado: MATAO / SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Imprime apenas 1 pagina

Mensagempor alaminojunior » 03 Fev 2018 16:21

Gostei !
Uma saída inteligente.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar de usuário

alaminojunior
Colaborador

Colaborador
 
Mensagens: 1689
Data de registro: 16 Dez 2005 20:26
Cidade/Estado: Ubatuba - SP
Curtiu: 27 vezes
Mens.Curtidas: 11 vezes

Imprime apenas 1 pagina

Mensagempor EDSON MONTRESOR » 04 Fev 2018 16:05

Boa tarde a todos.

Gostaria de saber se é possível centralizar dentro da ACHOICE as opções de impressoras ?

Na captura das impressoras tentei utilizar:

LOCAL nPrn, aPrn := padc(Win_PrinterList(),30)


e deu falha.

Também tentei:

nPrn := AChoice( 7, 1, MaxRow() - 1, 78 , padc(aPrn,30) , .T.,, nPrn ) 


e deu falha.

Gostaria que a ACHOICE exibisse os menu de impressoras centralizados:
"          IMPRESSORA A          "
"          IMPRESSORA B          "


e não

"IMPRESSORA A                    "
"IMPRESSORA B                    "


Obrigado
EDSON MONTRESOR
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 11
Data de registro: 23 Jan 2018 20:59
Cidade/Estado: MATAO / SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Imprime apenas 1 pagina

Mensagempor Toledo » 05 Fev 2018 06:55

Edson, tente o seguinte:

aPrn := Win_PrinterList()
FOR i:=1 TO Len(aPrn)
  aPrn[i]:= padc(aPrn[i],30)
NEXT


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
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Imprime apenas 1 pagina

Mensagempor rubens » 05 Fev 2018 07:48

Bom dia

Dá uma olhada nesse tópico... viewtopic.php?f=4&t=18184

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Bing [Bot] e 11 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro