Página 1 de 1

duvida com rotina para comprimir caracter

Enviado: 07 Jan 2016 16:12
por porter
ola pessoal, na rotina abaixo, estou imprimindo no modo comprimido, mas preciso comprimir ainda mais, gostaria de saber como faço para diminuir a largura dos caracteres, CHR(15) é uma configuração que tem dado certo, mas aqui, nessa linha, nao sei como, obrigado.

//impressao comprimida: { 3, -50 } ‚ igual 50/3, ou seja 16.6 cpp
oPrinter:SetFont( "Lucida Console", 10, { 3, -50 } )

xHarbour

Código: Selecionar todos

PROCEDURE W32PRN(arqtxt,nomeimpressora)
      #include "WinGdi.ch"
      Local cPrinter
      Local contl := 1
      cFileName := "C:\JATO\" + arqtxt
      SET PRINTER TO
      SET DEVICE TO SCREEN
      If !File("&cFileName")
         Return Nil
      Else  // Vamos colocar seu arquivo num Array
         cLinha := Nil
         aLinesPrint := {}
         cBuffer := FOpen( cFileName, 2 )
         Do While Hb_FReadLine( cBuffer, @cLinha, Nil, 255 ) = 0
              AaDd( aLinesPrint, cLinha )
         EndDo
         FClose( cBuffer )
      EndIf
*     cPrinter := PegaPrinter()  // escolhe a impressora (cPrinter retorna o nome da impressora)
      cPrinter := ALLTRIM(nomeimpressora)
      If !Empty( cPrinter )
         nCopias := 1  // numero de c¢pias
         oPrinter           := Win32Prn():new( cPrinter )
         oPrinter:landscape := .F.
         oPrinter:formType  := DMPAPER_A4  // folha A4
         oPrinter:copies    := nCopias
         IF .NOT. oPrinter:create()
            Alert("Erro Tentando Acessar a Impressora ; " + alltrim(nomeimpressora) )
            Return Nil
         ENDIF
         IF .NOT. oPrinter:startDoc( "Impressao Teste" )
            Alert("Erro Tentando Enviar os Dados de Impressao")
            Return Nil
         ENDIF
*****************************************************************		 
[b]//impressao comprimida: { 3, -50 } ‚ igual 50/3, ou seja 16.6 cpp
            oPrinter:SetFont( "Lucida Console", 10, { 3, -50 } )[/b]
*****************************************************************
         // impressao normal
*****************************************************************
*        oPrinter:SetFont( "Lucida Console", 10 )
*****************************************************************
*        oPrinter:CharSet( 0 )
*        oPrinter:bold( FW_NORMAL )  // nao negrito, nao italico, etc...
*****************************************************************
*        PrintBitMap(oPrinter, "C:\SYS222\Cowboy.bmp")
*****************************************************************
         For i = 1 To Len ( aLinesPrint )
             oPrinter:textOut( aLinesPrint[ i ] )  // imprime a linha
             oPrinter:newLine()  // passa para proxima linha
         Next
         oPrinter:endDoc()   // envia a impressora
         oPrinter:destroy()  // fecha documento de impressao
      EndIf
      Return Nil

duvida com rotina para comprimir caracter

Enviado: 08 Jan 2016 10:01
por Kapiaba

duvida com rotina para comprimir caracter

Enviado: 08 Jan 2016 10:24
por Jairo Maia
Olá Porter,

Observe o que está em vermelho nessa linha: oPrinter:SetFont( "Lucida Console", 10, { 3, -50} )

A linha acima informa que você está imprimindo 16,6 caracteres por polegada. Para você entender, se você alterar para { 3, -60 } por exemplo, então será impresso 20 caracteres por polegada. Ou seja, o raciocínio e dividir o segundo número pelo primeiro, então você tem a quantidade de caractres a serem impressos. ou seja: 60/3 = 20.

Não sei se xHarbour tem o mesmo comportamento de Harbour nessa classe quanto a isso, mas em Harbour se você quer imprimir 20 caractres por polegada, você pode usar assim: oPrinter:SetFont( "Lucida Console", 10, { 1, 20 } ).

Facilita o raciocínio, pois dividindo o segundo pelo primeiro seria: 20/1 = 20, e assim sucessivamente.

duvida com rotina para comprimir caracter

Enviado: 08 Jan 2016 11:18
por porter
ola Jairo, agora entendi, obrigado, a minha outra duvida é que estou conseguindo imprimir somente com impressora instalada localmente, sei que cPrinter no comando abaixo guarda o nome da impressora, mas qual informação devo acrescentar para imprimir pela estacao em uma impressora instalada no servidor, quando tento imprimir pela estação, da a mensagem "Erro Tentando Acessar a Impressora", o nome da impressora que estou tentando imprimir pela rede é

MP-2500 TH


cPrinter := PegaPrinter() // escolhe a impressora (cPrinter retorna o nome da impressora)

duvida com rotina para comprimir caracter

Enviado: 08 Jan 2016 12:37
por Jairo Maia
Se a impressora da rede aparece na lista em PegaPrinter() e você a seleciona, parece que a impressora da estação está compartilhada e deveria funcionar normalmente.

Faça um teste colocando a impressora da rede como padrão. Veja o que acontece.

duvida com rotina para comprimir caracter

Enviado: 08 Jan 2016 14:02
por porter
olá Jairo, obrigado por sua atenção, esta funcionando tudo perfeitamente, com o comando abaixo, estou imprimindo em modo comprimido, como faço para imprimir comprimido e em negrito ?

Código: Selecionar todos

//impressao comprimida: { 3, -50 } ‚ igual 50/3, ou seja 16.6 cpp
oPrinter:SetFont( "Lucida Console", 10, { 3, -70 } )
obrigado.

duvida com rotina para comprimir caracter

Enviado: 08 Jan 2016 15:17
por Jairo Maia
Porter, você pode usar um desses dependendo do que deseja. Tenha em mente que fonte negrito usa largura maior. Talvez você tenha que aumentar um pouquinho o 70::

Código: Selecionar todos

oPrinter:Bold( FW_SEMIBOLD )   // semi negrito
oPrinter:Bold( FW_BOLD )       // negito
oPrinter:Bold( FW_EXTRABOLD )  // negrito extra
No ponto que desejar voltar ao normal use:

Código: Selecionar todos

oPrinter:Bold( FW_NORMAL )  // fonte normal

duvida com rotina para comprimir caracter

Enviado: 08 Jan 2016 15:49
por porter
Jairo, fiz dessa forma e deu certo, qual a diferença de fazer assim ou usando os comandos abaixo que você sugeriu ?
oPrinter:SetFont( "Lucida Console", 10,{3,-60},700,.F.,.F. )


// qual a diferença de usar assim:

oPrinter:Bold( FW_SEMIBOLD ) // semi negrito
oPrinter:Bold( FW_BOLD ) // negito
oPrinter:Bold( FW_EXTRABOLD ) // negrito extra

duvida com rotina para comprimir caracter

Enviado: 08 Jan 2016 15:58
por Jairo Maia
Olá Porter,

Nenhuma se for trabalhar com o texto todo no mesmo tipo de fonte. No caso da sugestão anterior, seria que você pode mesclar o tipo da fonte definida sem usar novamente :SetFont(), podendo alternar entre normal, outro tipo ou negrito. Pronto, já solucionou. Legal...

Mas se aceita uma sugestão, troque o 700 por FW_BOLD. Isso facilita no futuro você ler seus fontes. Exemplo:

Código: Selecionar todos

oPrinter:SetFont( "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F. )

duvida com rotina para comprimir caracter

Enviado: 08 Jan 2016 16:16
por porter
Muito boa a sua sugestão, e muitissimo obrigado por sua atenção.