win_prn Centralizar texto

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

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

win_prn Centralizar texto

Mensagem por asimoes »

Prezados,

Alguém tem algum exemplo usando win_prn para impressão de texto centralizado a esquerda e direita?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

win_prn Centralizar texto

Mensagem por Jairo Maia »

:textOut( <cString>], [<lNewLine>], [<lUpdatePosX>], [<nTexAlign>] )

Onde nTexAlign tem os seguintes valores:

0 = (padrão) alinhamento a esquerda
1 = alinhamento a direita
2 = alinhamento centralizado
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

win_prn Centralizar texto

Mensagem por asimoes »

Olá Jairo,

Eu estou direcionando a impressão para uma impressora pdf (CutePdf Writer)

Eu tentei isso:

oPrn:SetPrc(8,0)
oPrn:Textout("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS",.t.,.t.,1) //direita (imagem abaixo)

Quando alinhado a esquerda (com 0) aparece normal abaixo do logo, quando alinhado ao centro, não mostra nada.


aparece isso:
Screen Shot 11-19-15 at 03.22 PM.PNG
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

win_prn Centralizar texto

Mensagem por asimoes »

Jairo,

Eu consegui, alinhar a direita e centralizar desta forma:

nColC:=(oPrn:MaxCol() - Len("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS")) /2 * oPrn:CharWidth
nColR:=(oPrn:MaxCol() - Len("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS")) * oPrn:CharWidth

oPrn:SetPrc(8,0)

oPrn:SetPos( nColc )
oPrn:Textout("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS",.t.)
oPrn:SetPos( nColr )
oPrn:Textout("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS",.t.)
Screen Shot 11-19-15 at 04.15 PM.PNG
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

win_prn Centralizar texto

Mensagem por asimoes »

Código: Selecionar todos

 aVetor:={}
   
   aAdd(aVetor,{"ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS","C"})
   aAdd(aVetor,{"DA PREVIDÊNCIA SOCIAL NO ESTADO DO RIO DE JANEIRO","C"})
   aAdd(aVetor,{"Data: "+Padl(hb_dtoc(Date(),"DD/MM/YYYY"),10),"R"})
   aAdd(aVetor,{"Hora: "+Padl(Time(),10),"R"})
   aAdd(aVetor,{"Pág : "+Padl(StrZero(nPag,4),10),"R"})
   
   oPrn:SetPrc(8,0)
   
   For i:=1 To Len(aVetor)
      If aVetor[i,2] = "C"
         nAlign:=(oPrn:MaxCol() - Len(aVetor[i,1])) /2 * oPrn:CharWidth
      Else
         nAlign:=(oPrn:MaxCol() - Len(aVetor[i,1])) * oPrn:CharWidth
      Endif
      oPrn:SetPos( nAlign )
      oPrn:Textout(aVetor[i,1],.t.)
   Next
O resultado ficou assim:
Screen Shot 11-19-15 at 04.31 PM.PNG
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

win_prn Centralizar texto

Mensagem por asimoes »

Minha função de testes para impressão de cabeçalhos está ficando assim:

Código: Selecionar todos

STATIC PROCEDURE PrintCabec( oPrn, cBitFile, nPag )

   LOCAL oBMP, nLinha:=210, nColuna:=130, nColFixed, nHandleFile, nWidth, nHeight 

   hb_Default(@nPag, 1)

   nHandleFile:=hwg_Fi_load( cBitFile )
 
   nWidth:=hwg_Fi_getwidth( nHandleFile )
   
   nHeight:=hwg_Fi_getheight( nHandleFile )
   
   aVetor:={}
   
   aAdd(aVetor,{"ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS","C"})
   aAdd(aVetor,{"DA PREVIDÊNCIA SOCIAL NO ESTADO DO RIO DE JANEIRO","C"})
   aAdd(aVetor,{"Data: "+Padl(hb_dtoc(Date(),"DD/MM/YYYY"),10),"R"})
   aAdd(aVetor,{"Hora: "+Padl(Time(),10),"R"})
   aAdd(aVetor,{"Pág : "+Padl(StrZero(nPag,4),10),"R"})
   aAdd(aVetor,{"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012","L"})
   aAdd(aVetor,{"0        10        20        30        40        50        60        70        80        90       100       110       120         132","L"})
   aAdd(aVetor,{Replicate("-",132),"L"})
   oPrn:SetPrc(3,0)
   
   For i:=1 To Len(aVetor)
      Switch aVetor[i,2]
      Case "C"
         nAlign:=(oPrn:MaxCol() - Len(aVetor[i,1])) /2 * oPrn:CharWidth
         Exit
      Case "R" 
         nAlign:=(oPrn:MaxCol() - Len(aVetor[i,1])) * oPrn:CharWidth
         Exit
      Case "L"
         nAlign:=3 * oPrn:CharWidth
         Exit
      EndSwitch
      oPrn:SetPos( nAlign )
      oPrn:Textout(aVetor[i,1],.t.)
   Next
  
   IF ! Empty( cBitFile )
      IF hb_vfExists( cBitFile )
         oBMP := win_BMP():New()
         IF oBmp:loadFile( cBitFile )
            oBmp:Draw( oPrn, { nColuna, nLinha, nWidth, nHeight } )
            /* Note: Can also use this method to print bitmap */
            //oBmp:Rect := { nColuna, nLinha, nWidth, nHeight }
            //oPrn:DrawBitmap( oBmp )
         ENDIF
         oBMP:Destroy()
      ENDIF
   ENDIF

   //oPrn:SetPrc( oPrn:PRow() + 1, 0 ) //Se for necessário pular uma linha
   
RETURN
Screen Shot 11-19-15 at 06.53 PM.PNG
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

win_prn Centralizar texto

Mensagem por Jairo Maia »

Olá Alexandre,

Realmente. Fiz alguns testes aqui e o parâmetro 2 (centralizar) não funciona mesmo. E verificando meus relatórios (usando fonte padrão) vi que uso também a função PadC() para centralizar a numeração da página. Algo como:

Código: Selecionar todos

#include "WinGdi.ch"

Function Main()

 nPagina := 1
 
 oPrinter := Win_Prn():new( GetDefaultPrinter() )
 oPrinter:FormType  := DMPAPER_A4
 oPrinter:Create()
 oPrinter:StartDoc()
 oPrinter:NewLine()
 
 oPrinter:SetPrc( oPrinter:MaxRow()-1, 1 )
 oPrinter:TextOut( Replicate( "-", oPrinter:MaxCol() ), .t. )
 oPrinter:TextOut( PadC( "Pagina " + Hb_NToS( nPagina ), oPrinter:MaxCol() ) )

 oPrinter:EndDoc()
 oPrinter:Destroy()

Return Nil
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:

win_prn Centralizar texto

Mensagem por Toledo »

Amigos, vejam este exemplo:

Código: Selecionar todos

#include "hbwin.ch"

Function Main()

 oPrinter:=Win_Prn():new( "PDFCreator" )
 oPrinter:Create()
 oPrinter:StartDoc("Teste")

 nAliCen:=hb_BitOr( WIN_TA_BASELINE, WIN_TA_CENTER )
 oPrinter:SetPrc( oPrinter:maxRow()/2, oPrinter:maxCol()/2 )
 oPrinter:TextOut("|---> texto centralizado <---|",,,nAliCen)
 oPrinter:SetPrc( oPrinter:pRow()+2, oPrinter:maxCol()/2 )
 oPrinter:TextOut("|---> outra linha centralizado <---|",,,nAliCen)

 oPrinter:SetPrc( oPrinter:pRow()+3, 5 )
 oPrinter:TextOut("|---> texto esquerda")
 oPrinter:SetPrc( oPrinter:pRow()+2, 5 )
 oPrinter:TextOut("|---> outra linha na esquerda")

 nAliDir:=hb_BitOr( WIN_TA_BOTTOM, WIN_TA_RIGHT )
 oPrinter:SetPrc( oPrinter:pRow()+3, oPrinter:maxCol()-5)
 oPrinter:TextOut("texto direita <---|",,,nAliDir)
 oPrinter:SetPrc( oPrinter:pRow()+2, oPrinter:maxCol()-5)
 oPrinter:TextOut("outra linha na direita <---|",,,nAliDir)

 oPrinter:EndDoc()
 oPrinter:Destroy()

Return Nil
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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

win_prn Centralizar texto

Mensagem por asimoes »

Toledo e Jairo,

Obrigado pelas dicas.

Temos então 3 soluções para alinhar um texto na página:


aVetor:={"=== TEXTO CENTRALIZADO ===","C"}

oPrn:SetPrc(3, 0)

Minha solução:
nAlign:=(oPrn:MaxCol() - Len(aVetor[1])) /2 * oPrn:CharWidth
oPrn:SetPos( nAlign )
oPrn:Textout(aVetor[1],.T.)

Solução Jairo:

oPrn:TextOut( PadC(aVetor[1], oPrn:MaxCol() ), .T. )

Solução Toledo:

nAlignC:=hb_BitOr( WIN_TA_BASELINE, WIN_TA_CENTER )
oPrn:SetPrc( oPrn:pRow()+1, oPrn:maxCol()/2 )
oPrn:TextOut(aVetor[1],,,nAlignC)

:-Y
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

win_prn Centralizar texto

Mensagem por asimoes »

Fiz um teste com as 3 soluções e a solução usando padc() deu uma diferença

Tentando:

oPrn:TextOut( PADC(aVetor[1], oPrn:maxCol()),.T.)

Ou

oPrn:TextOut( PADC(aVetor[1], oPrn:maxCol()+1),.T.)

Ou

oPrn:TextOut( PADC(aVetor[1], oPrn:maxCol()-1),.T.)

Não alinhou

A primeira linha da imagem foi usando padc()

Não alinhou com os outros resultados a imagem abaixo:
Screen Shot 11-21-15 at 05.21 PM.PNG
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

win_prn Centralizar texto

Mensagem por Jairo Maia »

Olá Toledo,

Valeu a dica. Mais uma alternativa. Curioso é que tanto nAliCen e nAliDir retornam 30, mas para funcionar tem que usar como você fez.

Alexandre, uma coisa que percebi é que para ficar correto o alinhamento com PadC() usando MaxCol() precisa iniciar na coluna 1. Com seu exemplo está iniciando na coluna 0 (zero).
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)
Ruben Dario
Usuário Nível 3
Usuário Nível 3
Mensagens: 127
Registrado em: 14 Jun 2015 23:19
Localização: Colombia

win_prn Centralizar texto

Mensagem por Ruben Dario »

? Por casulidad has colocado codiog de barras

Saludos
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

win_prn Centralizar texto

Mensagem por cjp »

Colegas, estou testando o exemplo do Toledo, que funcionou perfeitamente, exceto por um detalhe: ao transpor para o meu sistema, ele está imprimindo no centro da página. Quero dizer: não apenas com alinhamento central entre a margem esquerda e a direita, como eu queria, mas também no centro entre o topo e o fim da página, e não estou conseguindo mudar isso.

Estou fazendo assim:

Código: Selecionar todos

#include "hbwin.ch"
oPrn:SetFont('Times New',22, {1,12}, 0,.T.,.F.)
nAliCen:=hb_BitOr( WIN_TA_BASELINE, WIN_TA_TOP )
oPrn:SetPrc( oPrn:maxRow()/2, oPrn:maxCol()/2 )
oPrn:TextOut("Teste - FAPI",,,nAlicen)
Tentei alterar a chamada à maxrow()/2, que imagino que esteja causando o problema, para várias outras formas, mas nunca dá certo.

Como faço para corrigir isso?
Inacio de Carvalho Neto
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

win_prn Centralizar texto

Mensagem por ANDRIL »

cjp escreveu:oPrn:SetPrc( oPrn:maxRow()/2, oPrn:maxCol()/2 )
Mudar maxRow()? Já tentou retirá-la.

Código: Selecionar todos

oPrn:SetPrc( oPrn:0, oPrn:maxCol()/2 )
Até+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

win_prn Centralizar texto

Mensagem por cjp »

Foi o que eu quis dizer: tentei substituir maxrow()/2 por 0, ou por 1, ou por row(). Mas, estranhamente, dá erro na compilação.
Inacio de Carvalho Neto
Responder