Problem when print CODE128 using Barlib

User avatar
vilian
Posts: 795
Joined: Wed Nov 09, 2005 2:17 am
Location: Brazil
Contact:

Problem when print CODE128 using Barlib

Post by vilian »

Hi Guys,

I´m having a problem when try to print barcode using Barlib.

IF I print the string 15140803532877000111550020000018651000018657 using the pattern CODE128 and after I try to read the barcode generated, the value returned is different.

Do you know why ?
Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Problem when print CODE128 using Barlib

Post by Enrico Maria Giordano »

Try this fixed code:

Code: Select all

FUNCTION _CODE128( cCode, cMode )

    LOCAL aCode := {"212222",;
                    "222122",;
                    "222221",;
                    "121223",;
                    "121322",;
                    "131222",;
                    "122213",;
                    "122312",;
                    "132212",;
                    "221213",;
                    "221312",;
                    "231212",;
                    "112232",;
                    "122132",;
                    "122231",;
                    "113222",;
                    "123122",;
                    "123221",;
                    "223211",;
                    "221132",;
                    "221231",;
                    "213212",;
                    "223112",;
                    "312131",;
                    "311222",;
                    "321122",;
                    "321221",;
                    "312212",;
                    "322112",;
                    "322211",;
                    "212123",;
                    "212321",;
                    "232121",;
                    "111323",;
                    "131123",;
                    "131321",;
                    "112313",;
                    "132113",;
                    "132311",;
                    "211313",;
                    "231113",;
                    "231311",;
                    "112133",;
                    "112331",;
                    "132131",;
                    "113123",;
                    "113321",;
                    "133121",;
                    "313121",;
                    "211331",;
                    "231131",;
                    "213113",;
                    "213311",;
                    "213131",;
                    "311123",;
                    "311321",;
                    "331121",;
                    "312113",;
                    "312311",;
                    "332111",;
                    "314111",;
                    "221411",;
                    "431111",;
                    "111224",;
                    "111422",;
                    "121124",;
                    "121421",;
                    "141122",;
                    "141221",;
                    "112214",;
                    "112412",;
                    "122114",;
                    "122411",;
                    "142112",;
                    "142211",;
                    "241211",;
                    "221114",;
                    "213111",;
                    "241112",;
                    "134111",;
                    "111242",;
                    "121142",;
                    "121241",;
                    "114212",;
                    "124112",;
                    "124211",;
                    "411212",;
                    "421112",;
                    "421211",;
                    "212141",;
                    "214121",;
                    "412121",;
                    "111143",;
                    "111341",;
                    "131141",;
                    "114113",;
                    "114311",;
                    "411113",;
                    "411311",;
                    "113141",;
                    "114131",;
                    "311141",;
                    "411131",;
                    "211412",;
                    "211214",;
                    "211232",;
                    "2331112"}

    LOCAL nSum, cBar, cCar
    LOCAL cTemp, n, nCAr, nCount := 0
    LOCAL lCodeC := .F., lCodeA := .F.

    IF VALTYPE( cCode ) != "C" THEN RETURN NIL

    IF !EMPTY( cMode )
        IF VALTYPE( cMode ) = "C" .AND. UPPER( cMode ) $ "ABC"
            cMode = UPPER( cMode )
        ENDIF
    ENDIF

    IF EMPTY( cMode )
        IF ISNUMBER( cCode )
            lCodeC = .T.
            cTemp  = aCode[ 106 ]
            nSum   = 105
        ELSE
            FOR n = 1 TO LEN( cCode )
                nCount += IF( SUBSTR( cCode, n, 1 ) > 31, 1, 0 )
            NEXT

            IF nCount < LEN( cCode ) / 2
                lCodeA = .T.
                cTemp  = aCode[ 104 ]
                nSum   = 103
            ELSE
                cTemp = aCode[ 105 ]
                nSum  = 104
            ENDIF
        ENDIF
    ELSE
        IF cMode = "C"
            lCodeC = .T.
            cTemp  = aCode[ 106 ]
            nSum   = 105
        ELSEIF cMode = "A"
            lCodeA = .T.
            cTemp  = aCode[ 104 ]
            nSum   = 103
        ELSE
            cTemp = aCode[ 105 ]
            nSum  = 104
        ENDIF
    ENDIF

    nCount = 0

    FOR n = 1 TO LEN( cCode )
        nCount++
        cCar = SUBSTR( cCode, n, 1 )

        IF lCodeC
            IF LEN( cCode ) = n
                CTemp += aCode[ 101 ]
                nSum += 100 * nCount
                nCount++
                nCar = ASC( cCar ) - 31
            ELSE
                nCar = VAL( SUBSTR( cCode, n, 2 ) ) + 1
                n++
            ENDIF
        ELSEIF lCodeA
            IF cCar > "_"
                cTemp += aCode[ 101 ]
                nCar = ASC( cCar ) - 31
            ELSEIF cCar <= " "
                nCar = ASC( cCar ) + 64
            ELSE
                nCar = ASC( cCar ) - 31
            ENDIF
        ELSE
            IF cCar <= " "
                cTemp += aCode[ 102 ]
                nCar = ASC( cCar ) + 64
            ELSE
                nCar = ASC( cCar ) - 31
            ENDIF
        ENDIF

        nSum += ( nCar - 1 ) * nCount
        cTemp = cTemp + aCode[ nCar ]
    NEXT

    nSum  = nSum % 103 + 1
    cTemp = cTemp + aCode[ nSum ] + aCode[ 107 ]
    cBar  = ""

    FOR n = 1 TO LEN( cTemp ) STEP 2
        cBar += REPLICATE( "1", VAL( SUBSTR( cTemp, n, 1 ) ) )
        cBar += REPLICATE( "0", VAL( SUBSTR( cTemp, n + 1, 1 ) ) )
    NEXT

    RETURN cBar
EMG
User avatar
vilian
Posts: 795
Joined: Wed Nov 09, 2005 2:17 am
Location: Brazil
Contact:

Re: Problem when print CODE128 using Barlib

Post by vilian »

Hi Enrico,

Don't work yet :(
I made a little sample:

Code: Select all

   PRINT oPrn NAME "Teste Barcode" PREVIEW
   oPrn:SetPortrait()

   PAGE
      aMargin:=oPrn:SizeInch2Pix(1,1)
    Code128(aMargin[2],aMargin[1],"15140803532877000111550020000018651000018657",oPrn,"C",0,.T.,0.029,1.20)

   ENDPAGE

   PrintEnd()
 
When I read the barcode that is printed, the number returned is 15140803531118000111550020000018651000018657
The part that is returning different is '1118' that is bold/red in the string.
Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Problem when print CODE128 using Barlib

Post by Enrico Maria Giordano »

You are right! There was a wrong code. This is the fixed version:

Code: Select all

FUNCTION _CODE128( cCode, cMode )

    LOCAL aCode := {"212222",;
                    "222122",;
                    "222221",;
                    "121223",;
                    "121322",;
                    "131222",;
                    "122213",;
                    "122312",;
                    "132212",;
                    "221213",;
                    "221312",;
                    "231212",;
                    "112232",;
                    "122132",;
                    "122231",;
                    "113222",;
                    "123122",;
                    "123221",;
                    "223211",;
                    "221132",;
                    "221231",;
                    "213212",;
                    "223112",;
                    "312131",;
                    "311222",;
                    "321122",;
                    "321221",;
                    "312212",;
                    "322112",;
                    "322211",;
                    "212123",;
                    "212321",;
                    "232121",;
                    "111323",;
                    "131123",;
                    "131321",;
                    "112313",;
                    "132113",;
                    "132311",;
                    "211313",;
                    "231113",;
                    "231311",;
                    "112133",;
                    "112331",;
                    "132131",;
                    "113123",;
                    "113321",;
                    "133121",;
                    "313121",;
                    "211331",;
                    "231131",;
                    "213113",;
                    "213311",;
                    "213131",;
                    "311123",;
                    "311321",;
                    "331121",;
                    "312113",;
                    "312311",;
                    "332111",;
                    "314111",;
                    "221411",;
                    "431111",;
                    "111224",;
                    "111422",;
                    "121124",;
                    "121421",;
                    "141122",;
                    "141221",;
                    "112214",;
                    "112412",;
                    "122114",;
                    "122411",;
                    "142112",;
                    "142211",;
                    "241211",;
                    "221114",;
                    "413111",;
                    "241112",;
                    "134111",;
                    "111242",;
                    "121142",;
                    "121241",;
                    "114212",;
                    "124112",;
                    "124211",;
                    "411212",;
                    "421112",;
                    "421211",;
                    "212141",;
                    "214121",;
                    "412121",;
                    "111143",;
                    "111341",;
                    "131141",;
                    "114113",;
                    "114311",;
                    "411113",;
                    "411311",;
                    "113141",;
                    "114131",;
                    "311141",;
                    "411131",;
                    "211412",;
                    "211214",;
                    "211232",;
                    "2331112"}

    LOCAL nSum, cBar, cCar
    LOCAL cTemp, n, nCAr, nCount := 0
    LOCAL lCodeC := .F., lCodeA := .F.

    IF VALTYPE( cCode ) != "C" THEN RETURN NIL

    IF !EMPTY( cMode )
        IF VALTYPE( cMode ) = "C" .AND. UPPER( cMode ) $ "ABC"
            cMode = UPPER( cMode )
        ENDIF
    ENDIF

    IF EMPTY( cMode )
        IF ISNUMBER( cCode )
            lCodeC = .T.
            cTemp  = aCode[ 106 ]
            nSum   = 105
        ELSE
            FOR n = 1 TO LEN( cCode )
                nCount += IF( SUBSTR( cCode, n, 1 ) > 31, 1, 0 )
            NEXT

            IF nCount < LEN( cCode ) / 2
                lCodeA = .T.
                cTemp  = aCode[ 104 ]
                nSum   = 103
            ELSE
                cTemp = aCode[ 105 ]
                nSum  = 104
            ENDIF
        ENDIF
    ELSE
        IF cMode = "C"
            lCodeC = .T.
            cTemp  = aCode[ 106 ]
            nSum   = 105
        ELSEIF cMode = "A"
            lCodeA = .T.
            cTemp  = aCode[ 104 ]
            nSum   = 103
        ELSE
            cTemp = aCode[ 105 ]
            nSum  = 104
        ENDIF
    ENDIF

    nCount = 0

    FOR n = 1 TO LEN( cCode )
        nCount++
        cCar = SUBSTR( cCode, n, 1 )

        IF lCodeC
            IF LEN( cCode ) = n
                CTemp += aCode[ 101 ]
                nSum += 100 * nCount
                nCount++
                nCar = ASC( cCar ) - 31
            ELSE
                nCar = VAL( SUBSTR( cCode, n, 2 ) ) + 1
                n++
            ENDIF
        ELSEIF lCodeA
            IF cCar > "_"
                cTemp += aCode[ 101 ]
                nCar = ASC( cCar ) - 31
            ELSEIF cCar <= " "
                nCar = ASC( cCar ) + 64
            ELSE
                nCar = ASC( cCar ) - 31
            ENDIF
        ELSE
            IF cCar <= " "
                cTemp += aCode[ 102 ]
                nCar = ASC( cCar ) + 64
            ELSE
                nCar = ASC( cCar ) - 31
            ENDIF
        ENDIF

        nSum += ( nCar - 1 ) * nCount
        cTemp = cTemp + aCode[ nCar ]
    NEXT

    nSum  = nSum % 103 + 1
    cTemp = cTemp + aCode[ nSum ] + aCode[ 107 ]
    cBar  = ""

    FOR n = 1 TO LEN( cTemp ) STEP 2
        cBar += REPLICATE( "1", VAL( SUBSTR( cTemp, n, 1 ) ) )
        cBar += REPLICATE( "0", VAL( SUBSTR( cTemp, n + 1, 1 ) ) )
    NEXT

    RETURN cBar
EMG
User avatar
vilian
Posts: 795
Joined: Wed Nov 09, 2005 2:17 am
Location: Brazil
Contact:

Re: Problem when print CODE128 using Barlib

Post by vilian »

I tried with the new code, but still not working here :(
Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Problem when print CODE128 using Barlib

Post by Enrico Maria Giordano »

Double check that you are using the new code, please. It works fine here now with your sample. Maybe you need this function:

Code: Select all

FUNCTION ISNUMBER( cStr )

    LOCAL i

    FOR i = 1 TO LEN( cStr )
        IF !ISDIGIT( SUBSTR( cStr, i, 1 ) ) THEN RETURN .F.
    NEXT

    RETURN .T.
EMG
User avatar
vilian
Posts: 795
Joined: Wed Nov 09, 2005 2:17 am
Location: Brazil
Contact:

Re: Problem when print CODE128 using Barlib

Post by vilian »

Enrico,

You are right. I was doing "IsNumber" by a wrong way. Everything is fine now.
Thank you very much ;)
Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
jds
Posts: 106
Joined: Sat Dec 05, 2009 12:44 pm

Re: Problem when print CODE128 using Barlib

Post by jds »

Hallo,
Where can I find the barlib library?
José
jds
Posts: 106
Joined: Sat Dec 05, 2009 12:44 pm

Re: Problem when print CODE128 using Barlib

Post by jds »

vilian wrote:Enrico,

You are right. I was doing "IsNumber" by a wrong way. Everything is fine now.
Thank you very much ;)
Hi Vilian
Can you send me the complete program to print code 128 starting from any number or name
Do you use barlib.lib or barlib32.lib and barcode.ch
Where do you position the .lib and the .ch (in fwh or harbour map)
Thank you
deschutterjose@gmail.com
User avatar
Otto
Posts: 4470
Joined: Fri Oct 07, 2005 7:07 pm
Contact:

Re: Problem when print CODE128 using Barlib

Post by Otto »

Hello,
May I ask why you don't use FIVEWIN’s build in EASYREPORT?

You read what you print.
15140803532877000111550020000018651000018657
Get Outlook for Android


Best regards
Otto

Image

Image
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org

********************************************************************
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Problem when print CODE128 using Barlib

Post by nageswaragunupudi »

The built-in barcode functionality of EasyReport can also be used directly using Printer class with this code:

Code: Select all

function printbarcode()

   local oPrn, oBarcode
   local cText := "FiveTechSoft"

   cText := "15140803532877000111550020000018651000018657"

   PRINT oPrn PREVIEW
   oPrn:SetLandScape()
   PAGE

      oBarCode := FWER_BarCode():New( oPrn:hDCOut, cText, 700,100, 3000, 400, 3 )
      WITH OBJECT oBarCode
         :nBCodeType    := 3  // CODE 128
         :nPinWidth     := 10
         :ShowBarCode()
      END

   ENDPAGE
   ENDPRINT

return nil
 
Using the same barcode class that FWH EasyReport uses.
This class is already available in FWH. You do not need any external library.
Regards

G. N. Rao.
Hyderabad, India
jds
Posts: 106
Joined: Sat Dec 05, 2009 12:44 pm

Re: Problem when print CODE128 using Barlib

Post by jds »

nageswaragunupudi wrote:The built-in barcode functionality of EasyReport can also be used directly using Printer class with this code:

Code: Select all

function printbarcode()

   local oPrn, oBarcode
   local cText := "FiveTechSoft"

   cText := "15140803532877000111550020000018651000018657"

   PRINT oPrn PREVIEW
   oPrn:SetLandScape()
   PAGE

      oBarCode := FWER_BarCode():New( oPrn:hDCOut, cText, 700,100, 3000, 400, 3 )
      WITH OBJECT oBarCode
         :nBCodeType    := 3  // CODE 128
         :nPinWidth     := 10
         :ShowBarCode()
      END

   ENDPAGE
   ENDPRINT

return nil
 
Using the same barcode class that FWH EasyReport uses.
This class is already available in FWH. You do not need any external library.

Is Easyreport also included in my 9.0 version of FWHarbour?
José (jds)
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Problem when print CODE128 using Barlib

Post by nageswaragunupudi »

What is 9.0 version?

Did you try the above code?
If it works for you, then the Easy Report runtime is included in your version.
Regards

G. N. Rao.
Hyderabad, India
User avatar
Marc Venken
Posts: 727
Joined: Tue Jun 14, 2016 7:51 am

Re: Problem when print CODE128 using Barlib

Post by Marc Venken »

[quote="nageswaragunupudi"]The built-in barcode functionality of EasyReport can also be used directly using Printer class with this code:

Code: Select all

function printbarcode()

   local oPrn, oBarcode
   local cText := "FiveTechSoft"

   cText := "15140803532877000111550020000018651000018657"

   PRINT oPrn PREVIEW
   oPrn:SetLandScape()
   PAGE

      oBarCode := FWER_BarCode():New( oPrn:hDCOut, cText, 700,100, 3000, 400, 3 )
      WITH OBJECT oBarCode
         :nBCodeType    := 3  // CODE 128
         :nPinWidth     := 10
         :ShowBarCode()
      END

   ENDPAGE
   ENDPRINT

return nil
 
Where is this function located ? :

FWER_BarCode():New( oPrn:hDCOut, cText, 700,100, 3000, 400, 3 )
Looking for the options that exist for :

 :nBCodeType    := 3  // CODE 128
Marc Venken
Using: FWH 20.08 with Harbour
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Problem when print CODE128 using Barlib

Post by nageswaragunupudi »

Available from FWH 18.05 onwards.
Regards

G. N. Rao.
Hyderabad, India
Post Reply