Problemas com Fonte de Codigo de Barras

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

Moderador: Moderadores

stefanotd
Usuário Nível 1
Usuário Nível 1
Mensagens: 31
Registrado em: 14 Mar 2014 08:10
Localização: Interior/SP

Problemas com Fonte de Codigo de Barras

Mensagem por stefanotd »

boa tarde pessoal,
estou usando o exemplo da biblioteca pra fazer testes com códigos de barras, no código do exemplo está funcionando redondo ,mas no meu código está acusando erro avisando que a variavel WIN_DMPAPER_A4 não existe, ainda não consegui ver o que está faltando,
se alguém puder dar uma olhada pra mim no código eu agradeço.

Código: Selecionar todos

// testes com cod.barras 

#include "hbzebra.ch"
#include "hbwin.ch"
 
#define _SCALE_ 7.2

function main()

setmode(25,80)

local hObject
local hDC
local pDEVMODE
local cPrinter
LOCAL hOBJECT
   
private cOrdem:="615200"
@ 00,00 clear to 24,79


//ImpCodBarra(cOrdem,20)

//static function ImpCodBarra(cTextoBarra,cTamFonte)

	cPrinter:= Win_PrinterGetDefault()
	pDevMode:= __wapi_DEVMODE_New( cPrinter ) 

   __wapi_DEVMODE_Set( pDEVMODE, {;
      "dmPaperSize"   => WIN_DMPAPER_A4,;
      "dmOrientation" => WIN_DMORIENT_PORTRAIT } )
	  
	hDC := wapi_CreateDC( NIL, cPrinter, NIL, pDEVMODE )
	
	if !empty(hDC)
		
		wapi_SetMapMode( hDC, WIN_MM_TEXT )
		
		wapi_SetBkMode( hDC, WIN_TRANSPARENT )
		
        hOBJECT := wapi_CreateFont( ;
               96, ;
               42, ;
               NIL, ;
               NIL, ;
               WIN_FW_NORMAL, ;
               .F., ;
               .F., ;
               NIL, ;
               WIN_ANSI_CHARSET, ;
               NIL, ;
               NIL, ;
               NIL, ;
               NIL, ;
               "Arial" )
			   
		wapi_SelectObject( hDC, hOBJECT )
		
		DrawBarCode(hDC, 20,1,"CODE39", cOrdem)
//		DrawBarcode( hDC,  20,   1, "EAN13",      "477012345678" )
		
		 wapi_EndPage( hDC )
		 
	endif




PROCEDURE DrawBarcode( hDC, nY, nLineWidth, cType, cCode, nFlags )

   LOCAL hZebra, nLineHeight, cTxt

   SWITCH cType
   CASE "EAN13"      ; hZebra := hb_zebra_create_ean13( cCode, nFlags )   ; EXIT
   CASE "EAN8"       ; hZebra := hb_zebra_create_ean8( cCode, nFlags )    ; EXIT
   CASE "UPCA"       ; hZebra := hb_zebra_create_upca( cCode, nFlags )    ; EXIT
   CASE "UPCE"       ; hZebra := hb_zebra_create_upce( cCode, nFlags )    ; EXIT
   CASE "CODE39"     ; hZebra := hb_zebra_create_code39( cCode, nFlags )  ; EXIT
   CASE "ITF"        ; hZebra := hb_zebra_create_itf( cCode, nFlags )     ; EXIT
   CASE "MSI"        ; hZebra := hb_zebra_create_msi( cCode, nFlags )     ; EXIT
   CASE "CODABAR"    ; hZebra := hb_zebra_create_codabar( cCode, nFlags ) ; EXIT
   CASE "CODE93"     ; hZebra := hb_zebra_create_code93( cCode, nFlags )  ; EXIT
   CASE "CODE11"     ; hZebra := hb_zebra_create_code11( cCode, nFlags )  ; EXIT
   CASE "CODE128"    ; hZebra := hb_zebra_create_code128( cCode, nFlags ) ; EXIT
   CASE "PDF417"     ; hZebra := hb_zebra_create_pdf417( cCode, nFlags ); nLineHeight := nLineWidth * 3 ; EXIT
   CASE "DATAMATRIX" ; hZebra := hb_zebra_create_datamatrix( cCode, nFlags ); nLineHeight := nLineWidth ; EXIT
   //CASE "QRCODE"     ; hZebra := hb_zebra_create_qrcode( cCode, nFlags ); nLineHeight := nLineWidth ; EXIT
   ENDSWITCH

   nY *= _SCALE_
   nLineWidth *= _SCALE_

   IF hZebra != NIL
      IF hb_zebra_geterror( hZebra ) == 0
         IF Empty( nLineHeight )
            nLineHeight := 16
         ENDIF
         wapi_TextOut( hDC,  40 * _SCALE_, nY, cType )
         IF Len( cTxt := hb_zebra_getcode( hZebra ) ) < 20
            wapi_TextOut( hDC, 150 * _SCALE_, nY, cTxt )
         ENDIF
         hb_zebra_draw_wapi( hZebra, hDC, wapi_CreateSolidBrush( 0 ), 300 * _SCALE_, nY, nLineWidth, nLineHeight * _SCALE_ )
      ELSE
         ? "Type", cType, "Code", cCode, "Error", hb_zebra_geterror( hZebra )
      ENDIF
      hb_zebra_destroy( hZebra )
   ELSE
      ? "Invalid barcode type", cType
   ENDIF

   RETURN

   
STATIC FUNCTION hb_zebra_draw_wapi( hZebra, hDC, hBrush, ... )

   IF hb_zebra_geterror( hZebra ) != 0
      RETURN HB_ZEBRA_ERROR_INVALIDZEBRA
   ENDIF

   RETURN hb_zebra_draw( hZebra, {| x, y, w, h | wapi_FillRect( hDC, { Int( x + .5 ), Int( y + .5 ), Int( x + .5 ) + Int( w ), Int( y + .5 ) + Int( h ) + 1 }, hBrush ) }, ... )



return nil
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Problemas com Fonte de Codigo de Barras

Mensagem por Itamar M. Lins Jr. »

Versão do Harbour que vc está querendo compilar esse código ?
No arquivo ".hbp" colocar hbwin.hbc

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
stefanotd
Usuário Nível 1
Usuário Nível 1
Mensagens: 31
Registrado em: 14 Mar 2014 08:10
Localização: Interior/SP

Problemas com Fonte de Codigo de Barras

Mensagem por stefanotd »

bom dia, o Harbour é a versão 3.0.

agora deu certo, foi falta de atenção minha. Tinha copiado o arquivo .hbp de outro projeto e esqueci de modificar o nome do .prg principal que estava apontando para outro programa.

obrigado
abraço
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Problemas com Fonte de Codigo de Barras

Mensagem por Itamar M. Lins Jr. »

Está acontecendo isso direto, o pessoal pegando código da versão 3.2 ou 3.4 e querendo compilar na versão 3.0
Ou pergunta algo, colocamos a resposta e quando vamos verificar a pessoa está usando Harbour ou xHarbour de 7 anos atrás...
Não custa nada testar a versão mais atualizada.
Se for um BUG, o pessoal vai corrigir na versão atual não vai corrigir na versão antiga.
Então é bom sempre ficar com a versão mais atualizada possível. Não tão antiga como está acontecendo.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
stefanotd
Usuário Nível 1
Usuário Nível 1
Mensagens: 31
Registrado em: 14 Mar 2014 08:10
Localização: Interior/SP

Problemas com Fonte de Codigo de Barras

Mensagem por stefanotd »

bom dia,
queremos testar a versão mais atualizada, mas com tantas obrigações do governo não está sobrando tempo.

Consegui imprimir o cod.barras usando a lib hbzebra e os exemplos postados, mas preciso incorporar esse cod.barras à um
relatório já existente ao invés de enviar para impressora padrão.

Estou tentando gerar um arquivo .txt com o tradicional set print to c:\Arq.txt, mas não está dando certo.

Como faço pra gerar um arquivo .txt contendo este cod.barras ? Depois é só ler o conteúdo do arquivo e incluir no relatório.

O código que estou utilizando é este:
obs: o comando "wapi_startdoc" está comentado para não gerar o arquivo pdf no software doPDF, que é a minha impressora padrão no momento.

Código: Selecionar todos

function ImpCodBarra( cTextoBarra, cTamFonte ,nCol,nLin, lLegenda)
*****************************************************************************************
local hObject
local hDC
local pDEVMODE
local cPrinter
local nRet

	cArqImp:= "c:\teste.txt"	
	set printer to cArqImp
	set device to print 
	
	
	cPrinter:= Win_PrinterGetDefault()
	pDevMode:= __wapi_DEVMODE_New( cPrinter ) 
    
    __wapi_DEVMODE_Set( pDEVMODE, {;
      "dmPaperSize"   => WIN_DMPAPER_A4,;
      "dmOrientation" => WIN_DMORIENT_PORTRAIT } )
	  
	hDC := wapi_CreateDC( NIL, cPrinter, NIL, pDEVMODE )
	
	if !empty(hDC)
		
		wapi_SetMapMode( hDC, WIN_MM_TEXT )
		
		//wapi_startDoc( hDC, { "lpszDocName" => "teste_barras" })
		
		wapi_SetBkMode( hDC, WIN_TRANSPARENT )
		
		wapi_startPage(hDC)
		
        hOBJECT := wapi_CreateFont( ;
               cTamFonte, ;		//altura era 96
               15, ;			//largura era 42 	
               NIL, ;
               NIL, ;
               WIN_FW_NORMAL, ;
               .F., ;
               .F., ;
               NIL, ;
               WIN_ANSI_CHARSET, ;
               NIL, ;
               NIL, ;
               NIL, ;
               NIL, ;
               "Arial" )
			   
		wapi_SelectObject( hDC, hOBJECT )	
		
		DrawBarcode( hDC, nLin,  0.6, "CODE39",     cTextoBarra ,,ncol,lLegenda)		
		
		wapi_EndPage( hDC )	
		wapi_EndDoc( hDC )
		
		set print to 		
		nRet:= win_printFileRaw(cPrinter,cArqImp)
		//nRet:= PrintFileRaw(cPrinter,cArqImp)

		set device to screen
		 
	endif
	
return .t.
obrigado
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Problemas com Fonte de Codigo de Barras

Mensagem por Jairo Maia »

Olá stefanotd,

Você está fazendo uma confusão generalizada ai. A hbzebra usa as funções Wapi do Windows, e não é possível você gerar um arquivo texto com o código de barras.

Este trecho em seu exemplo:

Código: Selecionar todos

cArqImp:= "c:\teste.txt"   
set printer to cArqImp
set device to print 
E este trecho:

Código: Selecionar todos

set print to       
nRet:= win_printFileRaw(cPrinter,cArqImp)
//nRet:= PrintFileRaw(cPrinter,cArqImp)

set device to screen
Não têm nenhum propósito, ou seja, eles não têm nenhuma função nesse caso.
stefanotd escreveu:Como faço pra gerar um arquivo .txt contendo este cod.barras ? Depois é só ler o conteúdo do arquivo e incluir no relatório.
Impossível. Inverta o raciocínio. Carregue o relatório, monte usando as funções Wapi, e posicione o código de barras.

Se tiver como anexar um exemplo desse relatório, fica melhor dar alguma sugestão.
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)
stefanotd
Usuário Nível 1
Usuário Nível 1
Mensagens: 31
Registrado em: 14 Mar 2014 08:10
Localização: Interior/SP

Problemas com Fonte de Codigo de Barras

Mensagem por stefanotd »

olá Jairo ,realmente me confundi,obrigado

o relatório infelizmente não poderei postar porque tem informação interna da empresa,incluí um cabeçalho semelhante,
a idéia era imprimir o cod.barras ao lado do nro do pedido.

Alterar todo o relatório está fora de cogitação no momento,é um prg grande.

Se inverter como você disse e gerar o .txt do relatório, teria como carregar o relatório, inserir a impressão do código de barras em uma determinada posição e enviar para impressora ?

obrigado
Anexos
rel.txt
(561 Bytes) Baixado 547 vezes
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Problemas com Fonte de Codigo de Barras

Mensagem por Jairo Maia »

Olá Stefano,

Compile o exemplo em anexo e faça o teste, e reporte o que acontece, e se é isso que você quer.

Nota: Veja que no fonte está para buscar o relatório chamado rel.txt. Coloque o relatório para teste com esse nome, ou altere a variável cRelName no exemplo.

Compilar usando: Hbmk2 TesteBarCode.Prg -lhbzebra -lhbwin -lxhb -lhbct
Anexos
TesteBarCode.Prg
(2.67 KiB) Baixado 688 vezes
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)
stefanotd
Usuário Nível 1
Usuário Nível 1
Mensagens: 31
Registrado em: 14 Mar 2014 08:10
Localização: Interior/SP

Problemas com Fonte de Codigo de Barras

Mensagem por stefanotd »

olá Jairo,
com seu exemplo ficou bom. Tinha escrito um código simples ontem mas ainda estava desconfigurado.

obrigado pela ajuda
abraço
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

Problemas com Fonte de Codigo de Barras

Mensagem por Linguagemclipper »

Meu sonho era conseguir um exemplo de impressão de código de barras EAN8 com WIN32PRN + HBZEBRA no Harbour 3.2.
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
lucimauro
Usuário Nível 3
Usuário Nível 3
Mensagens: 465
Registrado em: 21 Set 2004 21:02
Localização: Sobral-CE

Problemas com Fonte de Codigo de Barras

Mensagem por lucimauro »

Usando o harbour voce consegue imprimir , eu não imprimir pelo win_prn() mais gero codigo de barras de boa.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problemas com Fonte de Codigo de Barras

Mensagem por JoséQuintas »

Linguagemclipper escreveu:Meu sonho era conseguir um exemplo de impressão de código de barras EAN8 com WIN32PRN + HBZEBRA no Harbour 3.2.
Tá mal então....
Qualquer um serve de exemplo.
Sabe desenhar um quadrado ?
Então use isso lá uai...
Basicamente é isso que hbzebra faz: desenhar quadrados
Você só coloca o codeblock de desenhar quadrados pra ela usar.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problemas com Fonte de Codigo de Barras

Mensagem por JoséQuintas »

Mais que isso....
Seu sonho tá na sua máquina.

harbour/contrib/hbzebra/tests/*.prg

Código: Selecionar todos

   RETURN hb_zebra_draw( hZebra, {| x, y, w, h | wapi_FillRect( hDC, { Int( x + .5 ), Int( y + .5 ), Int( x + .5 ) + Int( w ), Int( y + .5 ) + Int( h ) + 1 }, hBrush ) }, ... )

Código: Selecionar todos

   hb_zebra_draw( hZebra, {| x, y, w, h | HPDF_Page_Rectangle( page, x, y, w, h ) }, ... )

Código: Selecionar todos

   hb_zebra_draw( hZebra, {| x, y, w, h | cairo_rectangle( hCairo, x, y, w, h ) }, ... )
Trata-se apenas de desenhar quadrados.
No codeblock vai receber as coordenadas e desenhar o quadrado.
Veja como é em WINPRN pra desenhar quadrado e coloque no codeblock.
Acima é pra wingdi, pdf e cairo.

Exemplo fictício para DOS/console:

Código: Selecionar todos

hb_zebra_Draw( hZebra, { | x, y, w, h | @ x, y, x+w, y+h box replicate(Chr(219),9) } )
Talvez aí fique mais visível: a rotina desenha retângulos, a harupdf vai usar a rotina diversas vezes.

Como desenhar retângulos na winprn ? aí é com você, já que você usa winprn.... mas, imagino o primeiro exemplo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

Problemas com Fonte de Codigo de Barras

Mensagem por Linguagemclipper »

Olá pessoal,

Desculpe não ter retornado para dar um feedback.

Já conseguí imprimir com a WIN32PRN tanto no Harbour 3.2 quanto no xHarbour 1.2.3. Sonho realizado... rs.

Acontece que os exemplos que andei encontrando usavam PDF e um tal de Cairo e eu uso a GDI do Windows mesmo.

Meu SIBRA (https://linguagemclipper.com.br/impress ... pper-excel) já funciona com o HBZEBRA daí eliminei a GD e a FREEIMAGE e não preciso mais de DLLs.

Com o SIBRA você imprime com @ SAY e todas as funções são meras strings. Facilita muito o trabalho. Já testei EAN8, EAN13, EAN128 (boleto) com a leitora, tudo certo. O QRCODE com o celular também deu tudo certo.
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

Problemas com Fonte de Codigo de Barras

Mensagem por Linguagemclipper »

JoséQuintas escreveu:Mais que isso....
Seu sonho tá na sua máquina.

harbour/contrib/hbzebra/tests/*.prg

Código: Selecionar todos

   RETURN hb_zebra_draw( hZebra, {| x, y, w, h | wapi_FillRect( hDC, { Int( x + .5 ), Int( y + .5 ), Int( x + .5 ) + Int( w ), Int( y + .5 ) + Int( h ) + 1 }, hBrush ) }, ... )

Código: Selecionar todos

   hb_zebra_draw( hZebra, {| x, y, w, h | HPDF_Page_Rectangle( page, x, y, w, h ) }, ... )

Código: Selecionar todos

   hb_zebra_draw( hZebra, {| x, y, w, h | cairo_rectangle( hCairo, x, y, w, h ) }, ... )
Trata-se apenas de desenhar quadrados.
No codeblock vai receber as coordenadas e desenhar o quadrado.
Veja como é em WINPRN pra desenhar quadrado e coloque no codeblock.
Acima é pra wingdi, pdf e cairo.

Exemplo fictício para DOS/console:

Código: Selecionar todos

hb_zebra_Draw( hZebra, { | x, y, w, h | @ x, y, x+w, y+h box replicate(Chr(219),9) } )
Talvez aí fique mais visível: a rotina desenha retângulos, a harupdf vai usar a rotina diversas vezes.

Como desenhar retângulos na winprn ? aí é com você, já que você usa winprn.... mas, imagino o primeiro exemplo.
Esse Quintas é muito lindo, né? Queria ter metade da inteligência que ele pensa que tem! hehehe
Tu acha que lá na pasta exemplos não foi o primeiro lugar que procurei?... rs
E diz que meu sonho está na minha máquina e finaliza dizendo que como eu uso a WINPRN aí é comigo... kkk 'Tá de sacanagem?! kkk
Todos os exemplos que você citou eu já tinha visto menos esse último, mas nem sei se funciona porque não tem nada a ver com a solução que implementei.

Quintas, preciso muito de sua ajuda, a gente sabe que você sabe muito, mas você tem inpulsão de querer responder tudo, responda quando souber o caso em baila, blz? Você só fez tirar onda, mas não acertou a solução que eu precisava. Tudo bem, continue essa cara prestativo, ok? O resto é besteira.
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Responder