Página 1 de 1

impressao de imagens

Enviado: 28 Abr 2016 13:21
por kakamachado
Boa tarde. Migrei um sistema Clipper para xHArbour (modo console) mantendo todas as telas, relatórios, etc. Entretanto gostaria de emitir nos relatórios (impressora laser) o logo da empresa (arquivo .JPG). Alguém podia me dizer como fazer isto usando os comandos @ linha, coluna say ............? Ou existe outra forma? Obrigado.

impressao de imagens

Enviado: 29 Abr 2016 14:57
por AutomoSistema
Boa tarde, existe sim um método que é win32prn, simples prático e objetivo

Exemplo:

Código: Selecionar todos

   #include "WinGdi.ch"

   #define  RGB_BLACK       RGB(   0,  0,  0 )
   #define  RGB_RED         RGB( 255,  0,  0 )
   #define  RGB_GREEN       RGB(   0,255,  0 )
   #define  RGB_BLUE        RGB(   0,  0,255 )
   #define  RGB_CYAN        RGB(   0,255,255 )
   #define  RGB_YELLOW      RGB( 255,255,  0 )
   #define  RGB_MAGENTA     RGB( 255,  0,255 )
   #define  RGB_WHITE       RGB( 255,255,255 )


   PROCEDURE Main
      LOCAL cPrinter := "EPSON Stylus DX5000 Series"
      LOCAL oPrinter
      LOCAL aFonts, cFont, nFont

      // Create printer object and configure print job
      oPrinter           := Win32Prn():new( cPrinter )
      oPrinter:landscape := .F.
      oPrinter:formType  := DMPAPER_A4
      oPrinter:copies    := 1

      // Create device context
      IF .NOT. oPrinter:create()
         Alert( "Cannot create device context" )
         QUIT
      ENDIF

      // Create print job
      IF .NOT. oPrinter:startDoc( "xHarbour test page" )
         Alert( "Cannot create document" )
         QUIT
      ENDIF

      // Text in fixed font
      oPrinter:textOut( "Text in default font" )
      oPrinter:bold( FW_EXTRABOLD )
      oPrinter:textOut( oPrinter:fontName )
      oPrinter:bold( FW_NORMAL )
      oPrinter:newLine()

      aFonts := oPrinter:getFonts()
      nFont  := AScan( aFonts, ;
                       {|a| "ARIAL" $ Upper(a[1]) } )

      cFont  := aFonts[nFont,1]

      // Text in proportional font
      oPrinter:setFont( cFont )
      oPrinter:textOut( "Text in Arial font" )
      oPrinter:bold( FW_EXTRABOLD )
      oPrinter:textOut( oPrinter:fontName )
      oPrinter:bold( FW_NORMAL )
      oPrinter:newLine()

      // Colored text
      oPrinter:setColor( RGB_YELLOW, RGB_BLUE )
      oPrinter:textOut( "Yellow on Blue" )
      oPrinter:newLine()

      // Draw colored line across page
      oPrinter:setPen( PS_DASH, 5, RGB_GREEN )
      oPrinter:line( oPrinter:posX, ;
                     oPrinter:posY, ;
                     oPrinter:rightMargin, ;
                     oPrinter:posY  )

      // Send output to printer
      oPrinter:endDoc()

      // Release GDI device context
      oPrinter:destroy()
   RETURN


   FUNCTION RGB( nRed, nGreen, nBlue )
   RETURN ( nRed + ( nGreen * 256 ) + ( nBlue * 65536 ) )

impressao de imagens

Enviado: 29 Abr 2016 17:33
por Toledo
Amigos, no exemplo da mensagem anterior faltou o código para imprimir a imagem!

Segue o exemplo que está no manual do Harbour:

Código: Selecionar todos

  PROCEDURE Main
     LOCAL cFileName, oWin32Bmp, oWin32Prn

      oWin32Prn := Win32Prn():new()  // default printer object
      IF .NOT. oWin32Prn:create()    // create device context
         Alert( "Unable to create device context for printer" )
         QUIT
      ENDIF

      cFileName := "TestImage.bmp"

      oWin32Bmp := Win32Bmp():new()  // load bitmap file into memory
      IF .NOT. oWin32Bmp:loadFile( cFileName )
         Alert( "Unable to load bitmap file: " + cFileName )
         QUIT
      ENDIF

      // print bitmap image
      oWin32Bmp:draw( oWin32Prn,  { 200, 400, 2000, 1500 } )

      // release GDI system resources of printer
      oWin32Prn:destroy()
   RETURN
Abraços,

impressao de imagens

Enviado: 30 Abr 2016 00:14
por kakamachado
Toledo, boa noite, obrigado por sua resposta.
Adequei um programa para testar sua sugestão, entretanto está cancelando ao tentar carregar a imagem. Erro: Alert( "Unable to load bitmap file: " + cFileName )
Abraços

impressao de imagens

Enviado: 30 Abr 2016 05:45
por Jairo Maia
kakamachado escreveu:Erro: Alert( "Unable to load bitmap file: " + cFileName )
Pelo exemplo do Toledo, se não existir um arquivo chamado TestImage.bmp na pasta do exemplo a mensagem que se terá na caixa do alert é: "Unable to load bitmap file: TestImage.bmp"

Mas se foi apenas para efeito de didática a mensagem acima, verifique se existe a imagem chamada TestImage.bmp na pasta do programa que você adequou. Se não existe precisa colocar, ou alterar essa linha e colocar o endereço e nome da imagem a ser carregada:

Código: Selecionar todos

cFileName := "TestImage.bmp"
Penso também que facilita se você postar a função que você adequou.

impressao de imagens

Enviado: 30 Abr 2016 14:22
por kakamachado
]Caros Jairo e Toledo, boa tarde.
Tinha colocado uma imagem com extensão .GIF em vez de .BMP. Não deu mais o erro citado anteriormente, mas a imagem (INSS.BMP) não está sendo impressa, apesar de constar na pasta do programa, O restante do "relatório" está sendo impresso normalmente. Segue rotina de teste. Obrigado.

Código: Selecionar todos

*-------------------------------------------------------------------*
* SISTEMA  : FPG - SISTEMA DE FOLHA DE PAGAMENTO                    *
* PROGRAMA : TESTE - RELATORIO DE EMPRESAS                          *
* FUNCAO   : testar impressao de logomarca                          *
*-------------------------------------------------------------------*
#include "WinGdi.ch"

FUNCTION MAIN()

LOCAL cFileName, oWin32Bmp, oWin32Prn

* ENVIA CABECALHO E RECEBE PARAMETROS *
*-------------------------------------*
CLEAR
WPAGINA     := 0
WW_L        := 05
WNOME_REL   := "RELATÓRIO DE EMPRESA(S)"

SET DEVICE TO PRINT

oWin32Prn := Win32Prn():new()  // default printer object
IF .NOT. oWin32Prn:create()    // create device context
	  Alert( "Unable to create device context for printer" )
	  QUIT
ENDIF

cFileName := "INSS.bmp"

oWin32Bmp := Win32Bmp():new()  // load bitmap file into memory
IF .NOT. oWin32Bmp:loadFile( cFileName )
    Alert( "Unable to load bitmap file: " + cFileName )
    QUIT
ENDIF

// print bitmap image
oWin32Bmp:draw( oWin32Prn,  { 200, 400, 2000, 1500 } )

@ WW_L+05,13 SAY "Empresa.: XPTO LTDA"
@ WW_L+07,13 SAY "CNPJ....: 99.999.999/0001-99"
@ WW_L+09,13 SAY "Situacao: INATIVA"

* FINALIZA O PROGRAMA *
*---------------------*
EJECT

// release GDI system resources of printer
oWin32Prn:destroy()

SET DEVICE TO SCREEN

RETURN

impressao de imagens

Enviado: 30 Abr 2016 19:11
por Toledo
Amigo, faltou alguns comandos e também os comandos SET PRINTER, @ ... SAY e EJECT do Clipper não vão mesclar com a classe Win32Prn.

Abraços,

impressao de imagens

Enviado: 02 Mai 2016 23:39
por kakamachado
Caros Toledo e Jairo, boa noite.
Emiti, do Manual do xHarbour, as instruções para uso da classe Win32Prn. Verifiquei como é impressa uma imagem, etc. e funcionou OK.
Entretanto não ficou claro para mim como substituir o famoso @ linha, coluna say do Clipper.
Suponhamos que eu tenha o comando clipper:
@ lin, col SAY EM_CGC PICT "@R XXXXXXXX/XXXX-XX"
Onde lin = 30 e col = 20, estão definidos em milímetros, como ficaria este comando com a oWin32Prn?
Desde já, obrigado.

impressao de imagens

Enviado: 03 Mai 2016 07:32
por Toledo
kakamachado escreveu:Suponhamos que eu tenha o comando clipper:
@ lin, col SAY EM_CGC PICT "@R XXXXXXXX/XXXX-XX"
Onde lin = 30 e col = 20, estão definidos em milímetros, como ficaria este comando com a oWin32Prn?
Tente o seguinte:

Código: Selecionar todos

oWin32Prn:setPrc(30,20)
oWin32Prn:TextOut(Transform(EM_CGC,"@R XXXXXXXX/XXXX-XX"), .F.)
Abraços,

impressao de imagens

Enviado: 09 Fev 2017 11:14
por nasouza
Bom Dia, aproveitando o exemplo como eu poderia imprimir um texto na frente da imagem(logotipo).

impressao de imagens

Enviado: 09 Fev 2017 13:12
por lugab
êh tópico bom....

Torcendo aqui pra aparecer exemplo de
1) impressão de imagem posicionada dentro de um retângulo e
2) cabeçalho/rodapé padrão pra todas as páginas, similar ao winword

impressao de imagens

Enviado: 31 Mar 2018 12:17
por nasouza
Alguém teria um exemplo de como imprimir a logo e do lado dela colocar os dados do cliente usando o oWin32Prn.

impressao de imagens

Enviado: 01 Abr 2018 11:25
por nasouza
Bom Dia, Toledo, é possível colocar a logo e os dados do cliente sendo impressos um ao lado do outro com a oWin32Prn?