Problem when print CODE128 using Barlib
Problem when print CODE128 using Barlib
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 ?
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 ?
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: Problem when print CODE128 using Barlib
Try this fixed code:
EMG
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
Re: Problem when print CODE128 using Barlib
Hi Enrico,
Don't work yet
I made a little sample:
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.
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()
The part that is returning different is '1118' that is bold/red in the string.
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: Problem when print CODE128 using Barlib
You are right! There was a wrong code. This is the fixed version:
EMG
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
Re: Problem when print CODE128 using Barlib
I tried with the new code, but still not working here
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: Problem when print CODE128 using Barlib
Double check that you are using the new code, please. It works fine here now with your sample. Maybe you need this function:
EMG
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.
Re: Problem when print CODE128 using Barlib
Enrico,
You are right. I was doing "IsNumber" by a wrong way. Everything is fine now.
Thank you very much
You are right. I was doing "IsNumber" by a wrong way. Everything is fine now.
Thank you very much
Re: Problem when print CODE128 using Barlib
Hallo,
Where can I find the barlib library?
José
Where can I find the barlib library?
José
Re: Problem when print CODE128 using Barlib
Hi Vilianvilian wrote:Enrico,
You are right. I was doing "IsNumber" by a wrong way. Everything is fine now.
Thank you very much
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
Re: Problem when print CODE128 using Barlib
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
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
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
********************************************************************
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Problem when print CODE128 using Barlib
The built-in barcode functionality of EasyReport can also be used directly using Printer class with this code:
Using the same barcode class that FWH EasyReport uses.
This class is already available in FWH. You do not need any external library.
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
This class is already available in FWH. You do not need any external library.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: Problem when print CODE128 using Barlib
nageswaragunupudi wrote:The built-in barcode functionality of EasyReport can also be used directly using Printer class with this code:Using the same barcode class that FWH EasyReport uses.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
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)
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Problem when print CODE128 using Barlib
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.
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
G. N. Rao.
Hyderabad, India
- Marc Venken
- Posts: 727
- Joined: Tue Jun 14, 2016 7:51 am
Re: Problem when print CODE128 using Barlib
[quote="nageswaragunupudi"]The built-in barcode functionality of EasyReport can also be used directly using Printer class with this code:
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
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
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
Using: FWH 20.08 with Harbour
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Problem when print CODE128 using Barlib
Available from FWH 18.05 onwards.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India