Problemas com Fonte de Codigo de Barras

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

Moderador: Moderadores

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: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.

Código: Selecionar todos

   hb_zebra_draw( hZebra, {| x, y, w, h | HPDF_Page_Rectangle( page, x, y, w, h ) } )
Quer tradução?

Código: Selecionar todos

hb_Zebra_Draw( hZebra, { | top, left, width, height | DesenhaQuadrado( top, left, width, height ) } )
É uma função pra desenhar quadrados.
Se essa função vai desenhar em winprn, printer, pdf, tela, tanto faz.
Apenas vai colocar aí a função que desenha quadrados.
Se quiser ver quais números a hb_zebra está passando, é só usar uma função de mostrar na tela.

Código: Selecionar todos

FUNCTION DesenhaQuadrado( top, left, width, height )

   ? top, left, width, height

   RETURN Nil
A hb_zebra é só isso mesmo, ela vai passando uma lista de 4 números pra função no codeblock.
A sua função é que vai dizer o que fazer com os números.

Não são 4 números, é uma lista, e vai passar 4 números por vez.
Ela tem tipo DO WHILE .... e vai passando 4 números por vez, até acabar.
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 »

zebra.png
A hbzebra só fornece números, não faz nada além disso.
A sua rotina é que vai fazer uso desses 4 números.
Nesse caso ela forneceu os 4 números por 110 vezes.
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 »

Só coloquei incompleto, mas é isso.

Código: Selecionar todos

         hb_zebra_draw( oZebraBarCode, {| a, b, c, d | HPDF_Page_Rectangle( ::oPage, a, b, c, d ) }, ;
                               nCol, nRow, nOneBarWidth, nHeight )
O cálculo dela é baseado nos parâmetros recebidos.
ELA recebe esses parâmetros a mais, mas a saída continua sendo 4 números por vez chamando o codeblock.

Se fosse possível mostrar em console, seria usando @ a, b, c, d BOX SPACE(9) COLOR "N/W"
Então... só precisa uma função de desenhar quadrados, seja PDF, WINPRN, tela, etc.
É simples assim mesmo.
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 »

qrcode.png
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 »

Quintas, eu já resolví, amigo.

Código: Selecionar todos

	// DESENHA O CÓDIGO DE BARRAS
	hb_zebra_draw( hZebra, {| x, y, w, h | hDC:FillRect(Int( x + .5 ), Int( y + .5 ),;
		Int( x + .5 ) + Int( w ), Int( y + .5 ) + Int( h ) + 1, HB_WIN_RGB_BLACK) },;
		nX, nY, nLineWidth, nLineHeight * _SCALE_)
Eis meu código usado com a WIN32PRN.
O hDC é isso aqui:

Código: Selecionar todos

    #ifdef __XHARBOUR
		hDC:= Win32Prn():New(cPRN)
	#else
		hDC:= Win_Prn():New(cPRN)
	#endif
cPRN é o nome da impressora
Como tinha dito, já resolví e não era nada disso aí, mas obrigado por tentar me ajudar.
Não tem cairo, pdf, nem nada x nada x nada... é WIN32PRN.

The End
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
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 »

Muito bom.

Antigamente eu também achava que era uma coisa extraordinária, complicada, mas são só números.
Olhe um outro jeito que deixa claro o que hbzebra faz:

Código: Selecionar todos

PROCEDURE Main

   LOCAL hZebra, aList := {}, aCoord

   SetMode(50,50)
   CLS
   hZebra := hb_Zebra_Create_QRCode( "teste de qrcode", Nil )
   hb_Zebra_Draw( hZebra, { | x, y, w, h | AAdd( aList, { x, y, w, h } ) }, 1, 1, 1, 1 )
   hb_Zebra_Destroy( hZebra )
  // daqui pra baixo, pra fazer desenho, só os números gerados
   FOR EACH aCoord IN aList
      DesenhaQuadrado( aCoord[1], aCoord[2], aCoord[3], aCoord[4] )
   NEXT
   Inkey(0)
   RETURN
E isso acima pode ser reduzido em:

Código: Selecionar todos

   hb_Zebra_Draw( hZebra, { | x, y, w, h | DesenhaQuadrado( x, y, w, h ) }, 1, 1, 1, 1 )
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 »

Código: Selecionar todos

   // DESENHA O CÓDIGO DE BARRAS
   hb_zebra_draw( hZebra, {| x, y, w, h | hDC:FillRect(Int( x + .5 ), Int( y + .5 ),;
      Int( x + .5 ) + Int( w ), Int( y + .5 ) + Int( h ) + 1, HB_WIN_RGB_BLACK) },;
      nX, nY, nLineWidth, nLineHeight * _SCALE_)
Não sei exatamente essas coordenadas.
aqui o que vai fazer o quadrado, tá usando os 4 números:

Código: Selecionar todos

hDC:FillRect(Int( x + .5 ), Int( y + .5 ),;
      Int( x + .5 ) + Int( w ), Int( y + .5 ) + Int( h ) + 1, HB_WIN_RGB_BLACK)
agora essas coordenadas é que confundem

Código: Selecionar todos

      nX, nY, nLineWidth, nLineHeight * _SCALE_
Devem ser posições x/y, largura do quadrado/linha, e a última deve ser o tamanho total ou algum outro fator de conversão.
No QRCode são quadrados, mas em código de barras são retângulos/linhas/traços.
Só esse último que não entendi direito ao que se refere.
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 »

Código: Selecionar todos

METHOD DrawI25BarCode( nRow, nCol, nHeight, cCode, nOneBarWidth ) CLASS PDFClass

   LOCAL oZebraBarCode

   nCol         := ::ColToPdfCol( nCol )
   nRow         := ::RowToPdfRow( nRow + nHeight )
   nHeight      := ::RowToPdfRow( 0 ) - ::RowToPdfRow( nHeight )
   hb_default( @nOneBarWidth, 0.4 )

   // HPDF_Page_GSave( ::oPage )
   // HPDF_Page_Concat( ::oPage, 0.1, 0, 0, 0.1, 0, 0)

   oZebraBarCode := hb_zebra_create_itf( cCode, HB_ZEBRA_FLAG_WIDE2_5 )
   IF ( oZebraBarCode != NIL )
      IF hb_zebra_geterror( oZebraBarCode ) == 0
         hb_zebra_draw( oZebraBarCode, {| a, b, c, d | HPDF_Page_Rectangle( ::oPage, a, b, c, d ) }, nCol, nRow, nOneBarWidth, nHeight )
         HPDF_Page_Fill( ::oPage )
      ENDIF
   ENDIF
   hb_zebra_destroy( oZebraBarCode )
   // HPDF_Page_GRestore( ::oPage )

   RETURN Nil
Esse uso pra código de barras de boleto.
Nele, o último parâmetro é a altura do código de barras.
Fico na dúvida se é a altura total ou apenas de cada barra, porque no qrcode não dá certo colocar o total.
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 »

Código: Selecionar todos

METHOD DrawBarcodeQRCode( nRow, nCol, nHeight, cCode, nFlags ) CLASS PDFClass

   LOCAL hZebra, nWidth

   nCol         := ::ColToPdfCol( nCol )
   nRow         := ::RowToPdfRow( nRow + nHeight )
   nHeight      := ::RowToPdfRow( 0 ) - ::RowToPdfRow( nHeight )
   nWidth       := nHeight

   hZebra := hb_Zebra_Create_QRCode( cCode, nFlags )
   IF hb_Zebra_GetError( hZebra ) == 0
      hb_Zebra_Draw( hZebra, { | x, y, w, h | HPDF_Page_Rectangle( ::oPage, x, y, w, h ) }, nCol, nRow, nWidth, -nHeight )
      HPDF_Page_Fill( ::oPage )
      hb_Zebra_Destroy( hZebra )
   ENDIF

   RETURN NIL
É total.
A rotina apenas está convertendo linha/coluna de centímetros pra unidade do PDF.
::rowToPDFRow(0) - ::RowToPdfRow( nAltura ) é só uma forma de converter, equivale a zero - tamanho, mas na medida do pdf.
Altura e largura são iguais no qrcode.
Então os parâmetros variam conforme o tipo de código de barras.
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 »

Vi o nome mas não o conteúdo.

Código: Selecionar todos

   IF nVia == 2 .AND. ! Empty( oBoleto:cPixCode )
      ::DrawBarcodeQRCode( nLine + 39, 128, 0.8, oBoleto:cPixCode )
   ENDIF
..
METHOD DrawBarcodeQRCode( nRow, nCol, nHeight, cCode, nFlags ) CLASS PDFClass

   LOCAL hZebra, nWidth

   nCol         := ::ColToPdfCol( nCol )
   nRow         := ::RowToPdfRow( nRow + nHeight )
   nHeight      := ::RowToPdfRow( 0 ) - ::RowToPdfRow( nHeight )
   nWidth       := nHeight

   hZebra := hb_Zebra_Create_QRCode( cCode, nFlags )
   IF hb_Zebra_GetError( hZebra ) == 0
      hb_Zebra_Draw( hZebra, { | x, y, w, h | HPDF_Page_Rectangle( ::oPage, x, y, w, h ) }, nCol, nRow, nWidth, -nHeight )
      HPDF_Page_Fill( ::oPage )
      hb_Zebra_Destroy( hZebra )
   ENDIF

   RETURN NIL
Pequena correção: converte de milímetros e não de centímetros.
nHeight e nWidth são o tamanho de CADA quadrado, e não o tamanho da área toda do qrcode.
E o QRCODE não tem tamanho fixo, quanto mais texto maior ele fica.
Nos outros códigos, a altura da barra é fixa, e o código também vai usar o tamanho que precisar.
O código do boleto só é fixo, porque todos tem a mesma quantidade de números.
No caso desse qrcode estou passando 0.8 milímetros como altura e largura, e sai com uns 3 centímetros.
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
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

Problemas com Fonte de Codigo de Barras

Mensagem por Alexandre Silva »

Entao Jose
Estou tentando gerar o qrcode dentro do Mr boleto, o metodo usado é o mesmo que que vc mostrou ai hb_Zebra_Draw
Mas fiquei na duvida se no MR boleto tem mais paramentros, ou sao opcionais,

Como nao tenho as funcoes ColToPdfCol nem ColToPdfCol eu nao converti
mas Independente disso sempre estou tento retorno variavel nao existe SELF
Com certeza tem a ver com os parametros, deve ser detalhes
VC poderia me ajudar ? Ou alguem que ja fez QrCode no Boleto

Código: Selecionar todos


*--------------------------------
*  DrawBarcodeQRCode(0,0,0.40,vlinhaqr,HB_WIN_RGB_BLACK)
*--------------------------------
function DrawBarcodeQRCode( nRow, nCol, nHeight, cCode, nFlags )
LOCAL hZebra, nWidth
*   nCol   := ::ColToPdfCol( nCol )
*   nRow   := ::RowToPdfRow( nRow + nHeight )
*   nHeight:= ::RowToPdfRow( 0 ) - ::RowToPdfRow( nHeight )
nWidth:= nHeight

hZebra := hb_Zebra_Create_QRCode( cCode, nFlags )
IF hb_Zebra_GetError( hZebra ) == 0
   hb_Zebra_Draw( hZebra, { | x, y, w, h | HPDF_Page_Rectangle( ::oPage, x, y, w, h ) }, nCol, nRow, nWidth, -nHeight )
   HPDF_Page_Fill( ::oPage )
   hb_Zebra_Destroy( hZebra )
ENDIF
RETURN NIL


metodo no MrBoleto

Código: Selecionar todos

Method Draw_Zebra( ... ) Class MR_Boleto

   IF hb_zebra_GetError( ::hZebra_______ ) != 0
      RETURN HB_ZEBRA_ERROR_INVALIDZEBRA
   ENDIF

   hb_zebra_draw( ::hZebra_______, {| x, y, w, z | HPDF_Page_Rectangle( ::oPage, x, y, w, z ) }, ... )

   HPDF_Page_Fill( ::oPage )

   Return NIL
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
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 »

É que a rotina é usada dentro da classe de PDF.
Esse ::PDFxxx() indica que é uma rotina dentro da própria classe.

Dá uma olhada na PDFClass pra ver a conversão.
Basicamente é saber quantos pixels tem no milímetro. mas dependendo da medida, altura não é igual largura.
Por exemplo em letras: uma letra tem altura maior que largura.
Por isso tem uma rotina pra altura (row) e outra pra largura (col).

http://github.com/JoseQuintas/PDFClass

Pesquise pelo nome das funções no fonte.
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/
Responder