Dobre praktyki programistyczne

Drukowanie kodów kreskowych z GLE

04.10.2011

GLE (Graphics Layout Engine) to projekt Open Source będący graficznym językiem skryptowym. Używam tego programu do druku etykiet zawierających informacje o produkcie, w tym kod kreskowy. Wygenerowane pliki EPS (PostScript) można łatwo drukować automatycznie.

Poniżej jest szablon prostej etykiety, który pobiera 3 argumenty z linii poleceń: kod kreskowy w zapisie dwójkowym, dziesiętnym i nazwę produktu. Jeśli nie ma tych 3 danych, zostaną użyte przykładowe.

  1. ! define constants
  2. STEP = 0.04 ! width of one bar
  3. LHG = 1.2 ! height of one bar
  4.  
  5. ! control line
  6. sub ctrl
  7. rline 0 -0.2
  8. rmove 2*STEP 0.2
  9. end sub
  10.  
  11. ! barcode with digits
  12. sub barcode bin$ dec$
  13. set lwidth STEP
  14. bl = len(bin$)+1
  15. i = 0
  16. while i < bl
  17. bc$ = seg$(bin$, i, i)
  18. if bc$ = "1" then
  19. rline 0 -LHG
  20. rmove STEP LHG
  21. else
  22. rmove STEP 0
  23. end if
  24. i = i + 1
  25. next
  26.  
  27. rmove -95*STEP -LHG
  28.  
  29. ctrl
  30. ctrl
  31. rmove 42*STEP 0
  32. ctrl
  33. ctrl
  34. rmove 42*STEP 0
  35. ctrl
  36. ctrl
  37.  
  38. rmove -96*STEP-0.3 -0.35
  39. set font ttb hei 0.4 just left
  40. p$ = left$(dec$,1)
  41. write p$
  42. rmove 16*STEP 0
  43. p$ = seg$(dec$, 2, 7)
  44. write p$
  45. rmove 46*STEP 0
  46. p$ = seg$(dec$, 8, 13)
  47. write p$
  48. rmove 40*STEP 0
  49. write ">"
  50. end sub
  51.  
  52. ! label
  53. begin object label bin$ dec$ prodname$
  54. set font pshb hei 0.62 just cc
  55. write prodname$
  56.  
  57. rmove -2 -0.8
  58. barcode bin$ dec$
  59. end object
  60.  
  61. ! begin main program
  62. args = nargs() ! take number of command line arguments
  63. if args < 3 then ! use example data
  64. bin$ = "10100011010010011011001100011010100111001101101010111001011100101100110111001011100101110100101"
  65. dec$ = "1021002001009"
  66. draw label bin$ dec$ "Product"
  67. else ! use data from command line
  68. draw label arg$(1) arg$(2) arg$(3)
  69. end if

Zapisz powyższą zawartość jako label.gle. Następnie wydaj polecenie:

  1. gle label.gle

Polecenie do wydruku utworzonego pliku w Linuxie:

  1. lpr label.eps

Kod kreskowy EAN13 wygenerowany w GLE

Zalety

  • Szablon nie zaśmieca właściwego kodu.
  • PostScript jest standardem dla wydruku.
  • Format wektorowy jest skalowalny i generuje mniejsze pliki.

Sądzę, że to interesujący przykład tego, jak średniej wielkości projekt Open Source może być użyty w komercyjnym rozwiązaniu.

Leave a Response