FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Problem when print CODE128 using Barlib
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Problem when print CODE128 using Barlib
Posted: Mon Mar 05, 2018 07:54 PM
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
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Problem when print CODE128 using Barlib
Posted: Mon Mar 05, 2018 11:01 PM
Try this fixed code:

Code (fw): Select all Collapse
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
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Re: Problem when print CODE128 using Barlib
Posted: Tue Mar 06, 2018 11:39 AM
Hi Enrico,

Don't work yet :-)
I made a little sample:
Code (fw): Select all Collapse
   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
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Problem when print CODE128 using Barlib
Posted: Wed Mar 07, 2018 01:53 PM
You are right! There was a wrong code. This is the fixed version:

Code (fw): Select all Collapse
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
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Re: Problem when print CODE128 using Barlib
Posted: Wed Mar 07, 2018 03:06 PM

I tried with the new code, but still not working here :(

Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Problem when print CODE128 using Barlib
Posted: Wed Mar 07, 2018 03:10 PM
Double check that you are using the new code, please. It works fine here now with your sample. Maybe you need this function:

Code (fw): Select all Collapse
FUNCTION ISNUMBER( cStr )

    LOCAL i

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

    RETURN .T.


EMG
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Re: Problem when print CODE128 using Barlib
Posted: Wed Mar 07, 2018 05:29 PM

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
Posts: 124
Joined: Sat Dec 05, 2009 12:44 PM
Re: Problem when print CODE128 using Barlib
Posted: Tue Feb 12, 2019 10:29 AM

Hallo,
Where can I find the barlib library?
José

Posts: 124
Joined: Sat Dec 05, 2009 12:44 PM
Re: Problem when print CODE128 using Barlib
Posted: Mon Mar 18, 2019 03:22 PM
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
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: Problem when print CODE128 using Barlib
Posted: Mon Mar 18, 2019 10:30 PM
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



Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Problem when print CODE128 using Barlib
Posted: Tue Mar 19, 2019 02:55 AM
The built-in barcode functionality of EasyReport can also be used directly using Printer class with this code:
Code (fw): Select all Collapse
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
Posts: 124
Joined: Sat Dec 05, 2009 12:44 PM
Re: Problem when print CODE128 using Barlib
Posted: Tue Mar 19, 2019 08:15 AM
nageswaragunupudi wrote:The built-in barcode functionality of EasyReport can also be used directly using Printer class with this code:
Code (fw): Select all Collapse
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)
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Problem when print CODE128 using Barlib
Posted: Tue Mar 19, 2019 08:19 AM

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
Posts: 1487
Joined: Tue Jun 14, 2016 07:51 AM
Re: Problem when print CODE128 using Barlib
Posted: Tue Mar 19, 2019 09:39 AM
nageswaragunupudi wrote:The built-in barcode functionality of EasyReport can also be used directly using Printer class with this code:
Code (fw): Select all Collapse
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 23.08 with Harbour
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Problem when print CODE128 using Barlib
Posted: Tue Mar 19, 2019 09:41 AM

Available from FWH 18.05 onwards.

Regards



G. N. Rao.

Hyderabad, India