home *** CD-ROM | disk | FTP | other *** search
-
- %WARNING: EXTREMELY LARGE WASTE OF BANDWIDTH AHEAD
- % For anyone who has a need for it, here's a handy little PostScript UPC
- % generator.
-
- % --------- CUT HERE --------- (or don't - it'll run anyway!)
-
- %The following code is used to generate a UPC-A barcode.
- %
- %calling sequence:
- % string *Barcode* --
- %where string is a 10-digit string of numerics.
- %
- %Example:
- % (0123456789) Barcode
- %
- %Output will be in the form of a UPC barcode bounded by the square (0,0)-(1,1)
- %Scale and position as necessary before calling.
- %
- %This code is freely redistributable and is copyright 1991 Ronald L. Parker.
- %Universal Product Code, UPC, and the barcode itself may be someone's
- %trademarks or property. If this is the case, I assume no responsibility for
- %any damages, in any form, that the use of this code may cause. Whoever DOES
- %own the UPC code - don't come looking for me, I have no money anyway.
-
- /bar % width color bar --
- % width is in 'modules' 1-4
- % color: 0=black, 1=white, just like setgray
- {
- /BarColor exch def
- /BarWidth exch def
-
- /Tempwidth BarWidth 95 div def
- 0 .1 moveto 0 1 lineto Tempwidth 1 lineto Tempwidth .1 lineto closepath
- BarColor setgray fill
- Tempwidth 0 translate
- } def
-
- /dochar % string dochar --
- % string is one character, must be supported.
- {
- /ToOutput exch def
-
- ToOutput 66 eq {1 Dark bar 1 Light bar 1 Dark bar} if
- ToOutput 69 eq {1 Light bar 1 Dark bar 1 Light bar} if
- ToOutput 77 eq {1 Light bar 1 Dark bar 1 Light bar 1 Dark bar 1 Light bar
- /Dark 1 def /Light 0 def} if
- ToOutput 48 eq {3 Light bar 2 Dark bar 1 Light bar 1 Dark bar} if
- ToOutput 49 eq {2 Light bar 2 Dark bar 2 Light bar 1 Dark bar} if
- ToOutput 50 eq {2 Light bar 1 Dark bar 2 Light bar 2 Dark bar} if
- ToOutput 51 eq {1 Light bar 4 Dark bar 1 Light bar 1 Dark bar} if
- ToOutput 52 eq {1 Light bar 1 Dark bar 3 Light bar 2 Dark bar} if
- ToOutput 53 eq {1 Light bar 2 Dark bar 3 Light bar 1 Dark bar} if
- ToOutput 54 eq {1 Light bar 1 Dark bar 1 Light bar 4 Dark bar} if
- ToOutput 55 eq {1 Light bar 3 Dark bar 1 Light bar 2 Dark bar} if
- ToOutput 56 eq {1 Light bar 2 Dark bar 1 Light bar 3 Dark bar} if
- ToOutput 57 eq {3 Light bar 1 Dark bar 1 Light bar 2 Dark bar} if
- } def
-
- /Barcode % string code --
- {
- gsave
- /BarString exch def
- /NewString 15 string def
- /Dark 0 def
- /Light 1 def
- NewString 2 BarString 0 5 getinterval putinterval
- NewString 8 BarString 5 5 getinterval putinterval
- NewString 0 (B0) putinterval
- NewString 7 (M) putinterval
- NewString 14 (E) putinterval
- /CheckSum 0 def
- 0 1 9 {dup BarString exch 1 getinterval cvi exch 2 mod 2 mul 1 add mul
- CheckSum add /CheckSum exch def} for
- CheckSum 10 mod 10 exch sub /CheckSum exch def
- NewString 13 CheckSum cvi 1 string cvs putinterval
- NewString {dochar} forall
- 1 setgray
- -1 0 translate 10 95 div .1 moveto 45 95 div .1 lineto 45 95 div .2 lineto
- 10 95 div .2 lineto closepath fill
- 50 95 div .1 moveto 85 95 div .1 lineto 85 95 div .2 lineto
- 50 95 div .2 lineto closepath fill
- 0 setgray
- BarFont findfont [7 95 div 0 0 .2 0 0] makefont setfont
- 0 1 4 {dup 7 mul 10 add 95 div 0 moveto BarString exch 1 getinterval show} for
- 5 1 9 {dup 7 mul 15 add 95 div 0 moveto BarString exch 1 getinterval show} for
- grestore
- } def
-
- % This is the preferred font for UPC barcodes:
- %/BarFont /OCR-B def
-
- % This is what I use as I don't have OCR-B or any standard Adobe fonts.
- % You may insert your own favorite font here.
- /BarFont /SansSerif def
-
-
-