Codebar 128 c

HMG en Español

Moderator: Rathinagiri

User avatar
edufloriv
Posts: 240
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
Location: PERU

Codebar 128 c

Post by edufloriv »

Saludos amigos,

Alguien tendrá la fuente para generar códigos de barra 128c (c128c.ttf). De ser posible si tuvieran también el proceso para generar el código porque he leido que hay un proceso para generar el inicio, el final y el código de control. Por favor agradeceré toda la ayuda que me puedan dar con este formato de código de barras.


Mil gracias.

Eduardo Flores Rivas


LIMA - PERU
User avatar
Rathinagiri
Posts: 5480
Joined: Tue Jul 29, 2008 6:30 pm
DBs Used: MariaDB, SQLite, SQLCipher and MySQL
Location: Sivakasi, India
Contact:

Re: Codebar 128 c

Post by Rathinagiri »

Hi, you can use HMG_Zebra from HFCL library. Without any font you can create many varieties of barcode.
East or West HMG is the Best.
South or North HMG is worth.
...the possibilities are endless.
User avatar
edufloriv
Posts: 240
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
Location: PERU

Re: Codebar 128 c

Post by edufloriv »

Amigos EUREKAAAA !!!

Dos dias de investigación pero lo logré. A continuación el código para imprimir barcodes en el formato 128 C (Ojo, es la "C" para "A" y "B" hay que realizar algunas modificaciones a la función StrToBar128c() - "C" solo sirve para códigos con solo números. Porque insistí con este formato ? porque si bien, otros son más fáciles de usar, generan códigos de barra más largos. Además es un formato ampliamente aceptado y porque mi proveedor de facturas (que vienen con código de barras) usa este formato ;-)

Code: Select all

#include <hmg.ch>

FUNCTION main()

   DEFINE WINDOW barcode ;
   AT 0 , 0 ;
   WIDTH 580;
   HEIGHT 220;
   TITLE 'Program Barcode' ;
   MAIN ;
   ON INIT barcode_iniciar()

   @  050 , 020 LABEL Label_1   ;
      VALUE 'Code' ;
      WIDTH 050 ;
      HEIGHT 24 ;
      RIGHTALIGN

   @  050 , 080 TEXTBOX Text_1   ;
      WIDTH 250 ;
      HEIGHT 24

   @  050 , 340 BUTTON Button_1   ;
      CAPTION 'Draw Code' ;
      ACTION play_barcode() ;
      FONT 'Arial' SIZE 9 ;
      WIDTH 100 ;
      HEIGHT 28

   @  050 , 450 BUTTON BImprime  ;
      CAPTION 'Print' ;
      ACTION ImpBarras() ;
      FONT 'Arial' SIZE 9 ;
      WIDTH 100 ;
      HEIGHT 28

   @  100 , 020 LABEL Label_2   ;
      WIDTH 450 ;
      HEIGHT 70

END WINDOW

CENTER WINDOW barcode
ACTIVATE WINDOW barcode

RETURN


*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

PROCEDURE BarCode_Iniciar

PUBLIC cQueFuente := 'Bcode128.ttf'
PUBLIC cNomFuente := 'BarCode 128 INTERAL'

RETURN


*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

FUNCTION Play_Barcode()

   AddFont( cQueFuente )

   setproperty( 'barcode' ,'label_2' ,'value'    , StrToBar128c(Barcode.Text_1.value) )
   setproperty( 'barcode' ,'label_2' ,'fontname' , cNomFuente )
   setproperty( 'barcode' ,'label_2' ,'fontsize' , 48)
   domethod('barcode' ,'label_2' ,'refresh' )

   RemoveFont(cQueFuente)

RETURN


*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

FUNCTION AddFont(font)

   LOCAL nRet := WAPI_ADDFONTRESOURCEEX(font)

RETURN Nil


*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

FUNCTION RemoveFont(font)

   LOCAL nRet := WAPI_REMOVEFONTRESOURCEEX(font)

RETURN Nil


*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

FUNC StrToBar128c(tcString)

LOCAL lcStart    := CHR(105 + 32)
LOCAL lcStop     := CHR(106 + 32)
LOCAL lnCheckSum := ASC(lcStart) - 32
LOCAL lcRet      := ALLTRIM(tcString)
LOCAL lnLong     := LEN(lcRet)

   IF (lnLong / 2) <> int(lnLong / 2)
      lcRet  := '0'+lcRet
      lnLong := LEN(lcRet)
   ENDIF

   lcCar := ''

   FOR lnI = 1 TO lnLong STEP 2
      lcCar := lcCar + CHR( VAL( SUBSTR(lcRet,lnI,2) ) + 32 )
   NEXT

   lcRet  := lcCar
   lnLong := LEN(lcRet)

   FOR lnI = 1 TO lnLong
      lnAsc      :=  ASC( SUBSTR(lcRet,lnI,1) ) - 32
      lnCheckSum := lnCheckSum + (lnAsc * lnI)
   NEXT

   nMod    := INT( MOD( lnCheckSum , 103 ) )
   lcCheck := CHR( nMod + 32 )

   lcRet   := lcStart + lcRet + lcCheck + lcStop

   lcRet   := STRTRAN( lcRet , CHR(128) , CHR(232) )
   lcRet   := STRTRAN( lcRet , CHR(32)  , CHR(232) )
   lcRet   := STRTRAN( lcRet , CHR(127) , CHR(192) )

RETURN( lcRet )


*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

FUNC VALSTR(Number)

LOCAL STRNUM := ALLTRIM(STR(Number))

RETURN(STRNUM)


*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

PROCEDURE ImpBarras()

Local  lSuccess,nCant,DibBarras

   If Empty (BarCode.Text_1.value)
      Msginfo('Ingrese texto.')
      return
   endif

   AddFont( cQueFuente )

   SELECT PRINTER DIALOG TO lSuccess
   START PRINTDOC
      START PRINTPAGE
         dibbarras :=  StrToBar128c( BarCode.Text_1.value )
         @ 20,40 PRINT DibBarras Font cNomFuente Size 48
      END PRINTPAGE
   END PRINTDOC

   RemoveFont( cQueFuente )

Return
También adjunto el .ZIP con la fuente y el código que me sirvió de guía (y que está escrito en un lenguaje que desconozco).

También pongo los 2 links geniales que me ayudaron un montonononon !!

http://www.adams1.com/128code.html" onclick="window.open(this.href);return false;
http://www.adams1.com/128table.html" onclick="window.open(this.href);return false;

Espero aportar con esta investigación.

Saludos cordiales a todos.
Attachments
fuentes-cod-barras-barcode128.zip
(3.21 KiB) Downloaded 691 times

Eduardo Flores Rivas


LIMA - PERU
User avatar
danielmaximiliano
Posts: 2625
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: Codebar 128 c

Post by danielmaximiliano »

Hola :
el codigo esta hecho en Foxpro, un Xbase que compro microsoft hace micho tiempo
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

Codebar 128 c

Post by Pablo César »

Hola Eduardo, antes de todo felicitaciones y muchas gracias por compartir con nosotros. :D

Probé tu Demo e inserir el PREVIEW en el REPORT. Muy bueno.

Pero no estoy cierto si está correcto o yo hice algo errado. Como no tengo ningun código de barras ni el aparato tampoco. Hice una prueba en este site con este ejemplo: 780672318863

Y con tu aplicativo me muestra esto:
Screen.PNG
Screen.PNG (11.33 KiB) Viewed 7285 times
Pero seguún el site tendria que aparecer esto:
Screen1.PNG
Screen1.PNG (35.67 KiB) Viewed 7285 times
No sé si hice algo errado, pero algo no funciona bien. Porque cuando minimizo tu aplicativo/ejemplo, las barras toman otro formato. Esto es para ANSI o no servie en UNICODE ? Sabrias decirme ?

Obs.: Compilé con HMG version 3.2 (UNICODE)
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

Codebar 128 c

Post by Pablo César »

Hola Eduardo, compilé con HMG version Hmg.3.0.46 (ANSI) y dió cierto. Pena que no es una solución para UNICODE.
Attachments
Screen.PNG
Screen.PNG (11.12 KiB) Viewed 7283 times
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
User avatar
edufloriv
Posts: 240
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
Location: PERU

Re: Codebar 128 c

Post by edufloriv »

Hola Pablo,

Si efectivamente yo compilo con 3.0.46. Creo que no es UNICODE por la fuente, si te fijas en el nombre finaliza en INTERAL (AL = America Latina ?) - Yo he bajado varias fuentes C128 y revisandolas por dentro no todas son iguales, tal vez hay que encontrar el .TTF correcto.


Saludos,

Eduardo Flores Rivas


LIMA - PERU
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

Codebar 128 c

Post by Pablo César »

Es una pena, porque yo no uso más en ANSI... :(
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
User avatar
srvet_claudio
Posts: 2220
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Contact:

Re: Codebar 128 c

Post by srvet_claudio »

compilé con HMG version Hmg.3.0.46 (ANSI) y dió cierto. Pena que no es una solución para UNICODE.
Tenemos que terminar con esta confusión que se arrastra desde los inicios de HMG-Unicode.
HMG.3.2 y anteriores compilados con la opción Unicode, acepta tanto el conjunto de caracteres ANSI como UNICODE.

Para el ejemplo anterior basta colocar SET CODEPAGE TO SPANISH para que trabaje con el conjunto de caracteres ANSI en español y funciona perfecto el demo con HMG en Unicode.
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com
User avatar
srvet_claudio
Posts: 2220
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Contact:

Re: Codebar 128 c

Post by srvet_claudio »

Con HMG_ZEBRA es mucho mas fácil y no requiere fuentes externas:

Code: Select all

#include "hmg.ch"
#include "hfcl.ch"

FUNCTION main()

   DEFINE WINDOW Form_1 ;
   AT 0 , 0 ;
   WIDTH 580;
   HEIGHT 400;
   TITLE 'Barcode With HMG_ZEBRA' ;
   MAIN

   @  050 , 020 LABEL Label_1   ;
      VALUE 'Code' ;
      WIDTH 050 ;
      HEIGHT 24 ;
      RIGHTALIGN

   @  050 , 080 TEXTBOX Text_1   ;
      WIDTH 250 ;
      HEIGHT 24    VALUE "780672318863"

   @  050 , 340 BUTTON Button_1   ;
      CAPTION 'Draw Code' ;
      ACTION play_barcode() ;
      FONT 'Arial' SIZE 9 ;
      WIDTH 100 ;
      HEIGHT 28

   @  050 , 450 BUTTON BImprime  ;
      CAPTION 'Print' ;
      ACTION ImpBarras() ;
      FONT 'Arial' SIZE 9 ;
      WIDTH 100 ;
      HEIGHT 28

   @  80, 80 CHECKBOX CheckBox_1 CAPTION "Show digits" VALUE .F.

   @ 120, 20 IMAGE Image_1 PICTURE "" 

END WINDOW

CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1

RETURN


FUNCTION Play_Barcode()
LOCAL hBitmap

// hBitmap := HMG_CreateBarCode( cCode, cType, nLineWidth, nLineHeight, lShowdigits, cImageFileName, aBarColor, aBackColor, lCheckSum, lWide2_5, lWide3 )

   cCode          := Form_1.Text_1.value
   cType          := "CODE128"
   lShowdigits    := Form_1.CheckBox_1.VALUE

   hBitmap := HMG_CreateBarCode ( cCode, cType , NIL, NIL, lShowdigits )

   BT_HMGSetImage ("Form_1", "Image_1", hBitmap)

   BT_BitmapSaveFile( hBitmap, "BarCode128.BMP", BT_FILEFORMAT_BMP )
RETURN



PROCEDURE ImpBarras()

Local  lSuccess

   SELECT PRINTER DIALOG TO lSuccess PREVIEW

   START PRINTDOC
      START PRINTPAGE
         @ 20,40 PRINT IMAGE "BarCode128.BMP" WIDTH 50 HEIGHT 50
      END PRINTPAGE
   END PRINTDOC

Return
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com
Post Reply