erro ao imprimir logotipo em relatorio

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

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

erro ao imprimir logotipo em relatorio

Mensagem por porter »

ola pessoal, estou imprimindo relatorio em arquivo txt pelo WIN32PRN, esta funcionando tudo certo, mas agora eu preciso imprimir o logotipo da empresa no cabecalho e encontrei essa rotina aqui no forum, mas esta dando erro na linha destacada, espero que essas informacoes sejam suficientes para alguem poder me ajudar, obrigado.

Código: Selecionar todos

STATIC PROCEDURE CABECALHO
   local cPrinter
   local oPrinter := Win32BMP():New(cPrinter)
   SET DEVICE TO PRINT
   SET PRINT ON
   SET PRINT TO C:\ESTOQUE\TESTE.TXT
   SETPRC(0,0)
   PrintBitMap(oPrinter, "C:\ESTOQUE\LOGOTIPO.png") <-- aqui eu quero imprimir o logotipo da empresa
   @ contl,01 SAY NOMEEMP         PICT "@!"
   @ contl,06 SAY END                  PICT "@!"
   Return

PROCEDURE PrintBitMap( oPrn, cBitFile )
     local oBMP
     IF Empty( cBitFile )
        *
     ELSEIF ! hb_FileExists( cBitFile )
        Alert( cBitFile + " not found " )
     ELSE
        IF FILE ( cBitFile )
           oBmp := Win32BMP():New()
           oBmp:loadFile( cBitFile )
           // coordenadas e tamanho de impressao do logo
           oBmp:Draw( oPrn, { 100, 100, 200, 150 } ) [b]<-- Warning Base/1004 message not found: WIN32BMP DRAWBITMPA[/b]
        ENDIF
        oBMP:Destroy()
     ENDIF
     RETURN
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

erro ao imprimir logotipo em relatorio

Mensagem por Toledo »

porter escreveu:PrintBitMap(oPrinter, "C:\ESTOQUE\LOGOTIPO.png")
porter escreveu:oBmp := Win32BMP():New()
Você está tentando imprimir um arquivo PNG, mas a classe Win32BMP() só imprimi arquivos no formato BMP.

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
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

erro ao imprimir logotipo em relatorio

Mensagem por porter »

ola Toledo, estou tentando fazer com um arquivo.BMP, mas da o mesmo erro, estou gerando um arquivo TXT, tem algum problema, na compilacao da nao ocorre o erro, so ocorre na execucao do programa.
A mensagem de erro e:
Warning Base/1004 message not found: WIN32BMP: DRAWBITMAP

obrigado.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

erro ao imprimir logotipo em relatorio

Mensagem por Kapiaba »

Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

erro ao imprimir logotipo em relatorio

Mensagem por Kapiaba »

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

erro ao imprimir logotipo em relatorio

Mensagem por porter »

boa noite Kapiaba, entrei no topico que voce sugeriu, e copiei a rotina para dentro dos meus fontes para fazer um teste, e o erro esta dando na mesma rotina com a mesma mensagem de erro: Warning Base/1004 message not found:WIN32BMP.


comando do topico sugerido
oBmp:Draw( oPrn, { 200,10000, 1000, 750 } ) <-- erro nessa linha na hora da execucao do sistema.

nos meus fontes
oBmp: draw(oPrn, {100, 100, 200, 150} )

estou compilando com a seguinte versao:
xHarbour Compilar build 1.2.1(Simplex) (Rev. 6633)
Borland C++ 5.5.1 for win32

obrigado.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

erro ao imprimir logotipo em relatorio

Mensagem por Toledo »

porter escreveu:STATIC PROCEDURE CABECALHO
local cPrinter
local oPrinter := Win32BMP():New(cPrinter)
Amigo, este seu código da mensagem inicial deste tópico está meio estranho, no comando acima o correto é usar a função Win32PRN(), mas para criar este objeto você tem que passar o nome de uma impressora instalada no Windows, então cPrinter teria que ter o nome da impressora.
Outra coisa estranha e você estar usando os comandos SET PRINT TO C:\ESTOQUE\TESTE.TXT, misturando comandos da Win32Prn com comandos para criar um arquivo TXT, isto não vai dar certo.
porter escreveu:estou compilando com a seguinte versao:
xHarbour Compilar build 1.2.1(Simplex) (Rev. 6633)
Borland C++ 5.5.1 for win32
Bom, acho que a classe Win32Prn é nativa do xHarbour, então não teria problema algum em compilar com esta versão do xHarbour.

Agora só uma observação, na minha mensagem anterior eu disse que a classe Win32BMP() só aceitava arquivos no formato BMP. No xHarbour acho que é isto mesmo, apenas arquivos BMP, mas olhando os fontes do Harbour 3.2 (\contrib\hbwin\win_tbmp.prg) aceita arquivos BMP, JPEG e PNG.

Porter, veja novamente os links postados pelo nosso amigo Kapiaba ou clique nestas tags: Win32PRN Win32BMP

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
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

erro ao imprimir logotipo em relatorio

Mensagem por Kapiaba »

Bom dia, veja se este exemplo te ajuda:

Código: Selecionar todos

/*
 * $Id: testw32p.prg 8142 2007-12-05 08:17:30Z vszakats $
 */

#define FORM_A4 9

#define PS_SOLID            0

#define RGB( nR,nG,nB )   ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) )

#define BLACK          RGB( 0x0 ,0x0 ,0x0  )
#define BLUE           RGB( 0x0 ,0x0 ,0x85 )
#define GREEN          RGB( 0x0 ,0x85,0x0  )
#define CYAN           RGB( 0x0 ,0x85,0x85 )
#define RED            RGB( 0x85,0x0 ,0x0  )
#define MAGENTA        RGB( 0x85,0x0 ,0x85 )
#define BROWN          RGB( 0x85,0x85,0x0  )
#define WHITE          RGB( 0xC6,0xC6,0xC6 )

PROCEDURE Main()

   LOCAL nPrn := 1
   LOCAL cBMPFile := Space( 40 )
   LOCAL aPrn := GetPrinters()
   LOCAL GetList := {}

   CLS

   IF Empty( aPrn )
      Alert("No printers installed - Cannot continue")
      QUIT
   ENDIF

   DO WHILE nPrn != 0
      CLS
      @ 0, 0 SAY "Win32Prn() Class test program. Choose a printer to test"
      @ 1, 0 SAY "Bitmap file name" GET cBMPFile PICT "@!K"
      READ
      @ 2, 0 TO MaxRow(), MaxCol()
      nPrn := AChoice( 3, 1, MaxRow() - 1, MaxCol() - 1, aPrn, .T.,, nPrn )
      IF nPrn != 0
         PrnTest( aPrn[ nPrn ], cBMPFile )
      ENDIF
   ENDDO

   RETURN

STATIC PROCEDURE PrnTest( cPrinter, cBMPFile )

   LOCAL oPrinter := Win32Prn():New( cPrinter )
   LOCAL aFonts
   LOCAL x
   LOCAL nColFixed
   LOCAL nColTTF
   LOCAL nColCharSet

   oPrinter:Landscape := .F.
   oPrinter:FormType  := FORM_A4
   oPrinter:Copies    := 1

   IF !oPrinter:Create()
      Alert( "Cannot Create Printer" )
   ELSE
      IF !oPrinter:startDoc( "Win32Prn(Doc name in Printer Properties)" )
         Alert( "StartDoc() failed" )
      ELSE
         oPrinter:SetPen(PS_SOLID, 1, RED)
         oPrinter:Bold(800)
         oPrinter:TextOut(oPrinter:PrinterName+": MaxRow() = "+STR(oPrinter:MaxRow(),4)+"   MaxCol() = "+STR(oPrinter:MaxCol(),4))
         oPrinter:Bold(0)     // Normal
         oPrinter:NewLine()
         oPrinter:TextOut("   Partial list of available fonts that are available for OEM_")
         oPrinter:NewLine()
         oPrinter:UnderLine(.T.)
         oPrinter:Italic(.T.)
//         oPrinter:SetFont("Courier New",7,{3,-50})  // Compressed print
         nColFixed:= 40 * oPrinter:CharWidth
         nColTTF  := 48 * oPrinter:CharWidth
         nColCharSet  := 60 * oPrinter:CharWidth
         oPrinter:TextOut("FontName")
         oPrinter:SetPos(nColFixed)
         oPrinter:TextOut("Fixed?")
         oPrinter:SetPos(nColTTF)
         oPrinter:TextOut("TrueType?")
         oPrinter:SetPos(nColCharset)
         oPrinter:TextOut("CharSet#",.T.)
         oPrinter:NewLine()
         oPrinter:Italic(.F.)
         oPrinter:UnderLine(.F.)
         aFonts:= oPrinter:GetFonts()
         oPrinter:NewLine()
         FOR x:= 1 TO LEN(aFonts) STEP 2
            oPrinter:CharSet(aFonts[x,4])
            IF oPrinter:SetFont(aFonts[x,1])       // Could use "IF oPrinter:SetFontOk" after call to oPrinter:SetFont()
               IF oPrinter:FontName == aFonts[x,1]  // Make sure Windows didn´t pick a different font
                  oPrinter:TextOut(aFonts[x,1])
                  oPrinter:SetPos(nColFixed)
                  oPrinter:TextOut(IIF(aFonts[x,2],"Yes","No"))
                  oPrinter:SetPos(nColTTF)
                  oPrinter:TextOut(IIF(aFonts[x,3],"Yes","No"))
                  oPrinter:SetPos(nColCharSet)
                  oPrinter:TextOut(STR(aFonts[x,4],5))
                  oPrinter:SetPos(oPrinter:LeftMargin, oPrinter:PosY + (oPrinter:CharHeight*2))
                  IF oPrinter:PRow() > oPrinter:MaxRow() - 10  // Could use "oPrinter:NewPage()" to start a new page
                     EXIT
                  ENDIF
               ENDIF
            ENDIF
            oPrinter:Line(0, oPrinter:PosY+5, 2000, oPrinter:PosY+5)
         NEXT x
         oPrinter:SetFont("Lucida Console",8,{3,-50})  // Alternative Compressed print
         oPrinter:CharSet(0)  // Reset default charset
         oPrinter:Bold(800)
         oPrinter:NewLine()
         oPrinter:TextOut("This is on line"+STR(oPrinter:Prow(),4)+", Printed bold, " )
         oPrinter:TextOut(" finishing at Column: ")
         oPrinter:TextOut(STR(oPrinter:Pcol(),4))
         oPrinter:SetPrc(oPrinter:Prow()+3, 0)
         oPrinter:Bold(0)
         oPrinter:TextOut("Notice: UNDERLINE only prints correctly if there is a blank line after",.T.)
         oPrinter:TextOut("        it. This is because of ::LineHeight and the next line",.T.)
         oPrinter:TextOut("        printing over top of the underline. To avoid this happening",.T.)
         oPrinter:TextOut("        you can to alter ::LineHeight or use a smaller font")
         oPrinter:NewLine()
         oPrinter:NewLine()
         oPrinter:SetFont("Lucida Console",18, 0)  // Large print
         oPrinter:SetColor( GREEN )
         oPrinter:TextOut("Finally some larger print")
         oPrinter:Box(  0, oPrinter:PosY+100, 100, oPrinter:PosY+200)
         oPrinter:Arc(200, oPrinter:PosY+100, 300, oPrinter:PosY+200)
         oPrinter:Ellipse(400, oPrinter:PosY+100, 500, oPrinter:PosY+200)
         oPrinter:FillRect(600, oPrinter:PosY+100, 700, oPrinter:PosY+200, RED)
         
//       To print a barcode;
//       Replace 'BCod39HN' with your own bar code font or any other font
//         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 30 ) , oPrinter:MM_TO_POSY(60 ), "1234567890", "BCod39HN", 24, 0 )
//       
         PrintBitMap( oPrinter, cBMPFile )
         
         oPrinter:EndDoc()
      ENDIF
      oPrinter:Destroy()
   ENDIF

   RETURN

STATIC PROCEDURE PrintBitMap( oPrn, cBitFile )
   LOCAL oBMP
 
   IF Empty( cBitFile )
      *
   ELSEIF !File( cBitFile )
      Alert( cBitFile + " not found " )
   ELSE
      oBMP := Win32BMP():New()
      IF oBmp:loadFile( cBitFile )
        
         oBmp:Draw( oPrn, { 200, 200, 2000, 1500 } )
        
         // Note: Can also use this method to print bitmap
         //   oBmp:Rect := { 200, 200, 2000, 1500 }
         //   oPrn:DrawBitMap( oBmp )
        
      ENDIF
      oBMP:Destroy()
   ENDIF

RETURN
:D
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

erro ao imprimir logotipo em relatorio

Mensagem por Kapiaba »

Olá, testei em FWH e xHarbour e funcionou perfeito.

http://fivewin.com.br/index.php?/topic/ ... -win32prn/

Abs,
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

erro ao imprimir logotipo em relatorio

Mensagem por porter »

olá, o primeiro exemplo que você me passou, eu compilei ele em outra pasta fora do sistema para teste, e imprimiu corretamente o logotipo.bmp, só que imprimiu muito grande, agora eu vou ver como que faz para diminuir o tamanho e tentar adequa-lo ao meu sistema, assim que eu fizer eu retorno com o resultado.

abç kapiaba, e obrigado por sua atenção.
paiva
Usuário Nível 3
Usuário Nível 3
Mensagens: 300
Registrado em: 04 Ago 2005 10:28

erro ao imprimir logotipo em relatorio

Mensagem por paiva »

uso assim

if NFB_grafica = .t. && Pedido Grafica em A4
_PrintBitMap( oPrinter )
else
static function _PrintBitMap( oPrn ) //função para imprimir imagem do logotipo
LOCAL oBMP

xlogo_bmp = "\dbdc\logo\logo.bmp"

if File(xlogo_bmp)
if pfig_ci > 0

oBMP:= Win32BMP():new()
oBmp:loadFile( xlogo_bmp )
* C I , L I , C F , Tamanho (linhas)
xpulo_image = 0
oBmp:Draw( oPrn, { pfig_ci, xpulo_image+pfig_li, pfig_cf, pfig_lf } )

oBMP:Destroy()

emprimiu_logo = .t.


endif

if val(plargura) > 2
xxx_largura = val(plargura)
else
xxx_largura = 3
endif

if pfaz_dav = .t.
* a IMAGEM fica a esquerda do cabecalho NAO precisando avancar
else
for x_lar = 1 to xxx_largura
oPrinter:NewLine()
next
endif
endif

RETURN
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

erro ao imprimir logotipo em relatorio

Mensagem por porter »

olá, imprimi no meu sistema, o primeiro exemplo que você passou, só que imprime o logotipo e junto varios nomes de fontes que ocupa a folha inteira e o meu relatorio só sai na segunda folha, tente imprimir um logotipo com estensao png mas não imprime, mas com extensão bmp da certo, o problema que está acontecendo é esse de imprimir na primeira folha, o logotipo e o nome de fontes que ocupa a folha inteira.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

erro ao imprimir logotipo em relatorio

Mensagem por Jairo Maia »

Olá Porter,

Se você já ajustou o exemplo do colega Kapiaba e deu certo, então apenas limpe os códigos que imprimem os exemplos de fontes. Para isso, faça um teste trocando sua função STATIC PROCEDURE PrnTest( cPrinter, cBMPFile ) da seguinte forma e acho que vai funcionar:

Código: Selecionar todos

STATIC PROCEDURE PrnTest( cPrinter, cBMPFile )

   LOCAL oPrinter := Win32Prn():New( cPrinter )

   oPrinter:Landscape := .F.
   oPrinter:FormType  := FORM_A4
   oPrinter:Copies    := 1

   IF !oPrinter:Create()
      Alert( "Cannot Create Printer" )
   ELSE
      IF !oPrinter:startDoc( "Win32Prn(Doc name in Printer Properties)" )
         Alert( "StartDoc() failed" )
      ELSE

         PrintBitMap( oPrinter, cBMPFile )
         
         oPrinter:EndDoc()
      ENDIF
      oPrinter:Destroy()
   ENDIF

   RETURN
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)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

erro ao imprimir logotipo em relatorio

Mensagem por porter »

olá Jairo, agora deu certo com essa rotina que você passou, imprimiu corretamente, agora eu preciso ver se o posicionamento e o tamanho do logotipo são definidos dentro do sistema, ou se o tamanho é definido quando se desenha o logotipo, no meu caso estou fazendo no Power Point, é a primeira vez que faço portanto não sei se é a melhor maneira de criar um logotipo.

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

erro ao imprimir logotipo em relatorio

Mensagem por Jairo Maia »

Olá Porter,
porter escreveu:agora eu preciso ver se o posicionamento e o tamanho do logotipo são definidos dentro do sistema, ou se o tamanho é definido quando se desenha o logotipo
Ambas coisas. Depende muito de como você quer seu logotipo no formulário. Desenhe-o com a proporção desejada e depois ajuste no sistema na função de impressão.

De uma forma simplificada para seu caso, apenas ajuste por tentativa-e-erro esta linha: oBmp:Draw( oPrn, { 200, 200, 2000, 1500 } ), na função: PrintBitMap().

Quanto a melhor forma de você criar seu logo, não tenho opinião, mas se está funcionando assim, siga em frente.
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)
Responder