rghost_barcode 0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/doc/classes/RGhost.html +109 -0
- data/lib/doc/classes/RGhost/Barcode.html +147 -0
- data/lib/doc/classes/RGhost/Barcode/Auspost.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Azteccode.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Base.html +266 -0
- data/lib/doc/classes/RGhost/Barcode/Base.src/M000004.html +34 -0
- data/lib/doc/classes/RGhost/Barcode/Base.src/M000005.html +30 -0
- data/lib/doc/classes/RGhost/Barcode/Base.src/M000006.html +20 -0
- data/lib/doc/classes/RGhost/Barcode/Border.html +170 -0
- data/lib/doc/classes/RGhost/Barcode/Border.src/M000001.html +27 -0
- data/lib/doc/classes/RGhost/Barcode/Code11.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Code128.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Code2of5.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Code39.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Code93.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Datamatrix.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Ean13.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Ean2.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Ean5.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Ean8.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Guard.html +174 -0
- data/lib/doc/classes/RGhost/Barcode/Guard.src/M000003.html +27 -0
- data/lib/doc/classes/RGhost/Barcode/Interleaved2of5.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Isbn.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Kix.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Maxicode.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Msi.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Onecode.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Parameter.html +262 -0
- data/lib/doc/classes/RGhost/Barcode/Parameter.src/M000007.html +20 -0
- data/lib/doc/classes/RGhost/Barcode/Parameter.src/M000008.html +18 -0
- data/lib/doc/classes/RGhost/Barcode/Parameter.src/M000009.html +18 -0
- data/lib/doc/classes/RGhost/Barcode/Parameter.src/M000010.html +18 -0
- data/lib/doc/classes/RGhost/Barcode/Parameter.src/M000011.html +18 -0
- data/lib/doc/classes/RGhost/Barcode/Parameter.src/M000012.html +24 -0
- data/lib/doc/classes/RGhost/Barcode/Parameter.src/M000013.html +18 -0
- data/lib/doc/classes/RGhost/Barcode/Parameter.src/M000014.html +18 -0
- data/lib/doc/classes/RGhost/Barcode/Parameter.src/M000015.html +16 -0
- data/lib/doc/classes/RGhost/Barcode/Pdf417.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Pharmacode.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Plessey.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Postnet.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Qrcode.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Rationalizedcodabar.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Raw.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Royalmail.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Rss14.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Rssexpanded.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Rsslimited.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Symbol.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Text.html +193 -0
- data/lib/doc/classes/RGhost/Barcode/Text.src/M000002.html +30 -0
- data/lib/doc/classes/RGhost/Barcode/Upca.html +113 -0
- data/lib/doc/classes/RGhost/Barcode/Upce.html +113 -0
- data/lib/doc/classes/RGhost/Config.html +150 -0
- data/lib/doc/classes/RGhost/Config.src/M000016.html +45 -0
- data/lib/doc/classes/RGhost/Document.html +704 -0
- data/lib/doc/classes/RGhost/Document.src/M000017.html +19 -0
- data/lib/doc/classes/RGhost/Document.src/M000018.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000019.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000020.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000021.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000022.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000023.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000024.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000025.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000026.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000027.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000028.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000029.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000030.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000031.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000032.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000033.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000034.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000035.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000036.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000037.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000038.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000039.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000040.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000041.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000042.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000043.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000044.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000045.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000046.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000047.html +18 -0
- data/lib/doc/classes/RGhost/Document.src/M000048.html +18 -0
- data/lib/doc/created.rid +1 -0
- data/lib/doc/files/rghost_barcode/rghost_barcode_adapter_rb.html +101 -0
- data/lib/doc/files/rghost_barcode/rghost_barcode_base_rb.html +101 -0
- data/lib/doc/files/rghost_barcode/rghost_barcode_classes_rb.html +101 -0
- data/lib/doc/files/rghost_barcode/rghost_barcode_examples_rb.html +101 -0
- data/lib/doc/files/rghost_barcode/rghost_barcode_version_rb.html +101 -0
- data/lib/doc/files/rghost_barcode_rb.html +111 -0
- data/lib/doc/files/teste_main_rb.html +110 -0
- data/lib/doc/fr_class_index.html +67 -0
- data/lib/doc/fr_file_index.html +33 -0
- data/lib/doc/fr_method_index.html +74 -0
- data/lib/doc/index.html +24 -0
- data/lib/rghost_barcode.rb +7 -0
- data/lib/rghost_barcode/ps/auspost.ps +192 -0
- data/lib/rghost_barcode/ps/azteccode.ps +357 -0
- data/lib/rghost_barcode/ps/barcode_template.eps +1193 -0
- data/lib/rghost_barcode/ps/code11.ps +128 -0
- data/lib/rghost_barcode/ps/code128.ps +121 -0
- data/lib/rghost_barcode/ps/code2of5.ps +106 -0
- data/lib/rghost_barcode/ps/code39.ps +109 -0
- data/lib/rghost_barcode/ps/code93.ps +117 -0
- data/lib/rghost_barcode/ps/datamatrix.ps +328 -0
- data/lib/rghost_barcode/ps/ean13.ps +183 -0
- data/lib/rghost_barcode/ps/ean2.ps +101 -0
- data/lib/rghost_barcode/ps/ean5.ps +116 -0
- data/lib/rghost_barcode/ps/ean8.ps +101 -0
- data/lib/rghost_barcode/ps/interleaved2of5.ps +132 -0
- data/lib/rghost_barcode/ps/isbn.ps +118 -0
- data/lib/rghost_barcode/ps/kix.ps +98 -0
- data/lib/rghost_barcode/ps/maxicode.ps +307 -0
- data/lib/rghost_barcode/ps/msi.ps +104 -0
- data/lib/rghost_barcode/ps/onecode.ps +276 -0
- data/lib/rghost_barcode/ps/pdf417.ps +428 -0
- data/lib/rghost_barcode/ps/pharmacode.ps +69 -0
- data/lib/rghost_barcode/ps/plessey.ps +121 -0
- data/lib/rghost_barcode/ps/postnet.ps +114 -0
- data/lib/rghost_barcode/ps/qrcode.ps +530 -0
- data/lib/rghost_barcode/ps/rationalizedcodabar.ps +117 -0
- data/lib/rghost_barcode/ps/raw.ps +35 -0
- data/lib/rghost_barcode/ps/render.ps +307 -0
- data/lib/rghost_barcode/ps/render.ps~ +308 -0
- data/lib/rghost_barcode/ps/royalmail.ps +119 -0
- data/lib/rghost_barcode/ps/rss14.ps +237 -0
- data/lib/rghost_barcode/ps/rssexpanded.ps +211 -0
- data/lib/rghost_barcode/ps/rsslimited.ps +191 -0
- data/lib/rghost_barcode/ps/symbol.ps +49 -0
- data/lib/rghost_barcode/ps/upca.ps +128 -0
- data/lib/rghost_barcode/ps/upce.ps +157 -0
- data/lib/rghost_barcode/rghost_barcode_adapter.rb +249 -0
- data/lib/rghost_barcode/rghost_barcode_base.rb +210 -0
- data/lib/rghost_barcode/rghost_barcode_classes.rb +96 -0
- data/lib/rghost_barcode/rghost_barcode_examples.rb +35 -0
- data/lib/rghost_barcode/rghost_barcode_version.rb +8 -0
- data/lib/teste_main.rb +94 -0
- metadata +218 -0
@@ -0,0 +1,117 @@
|
|
1
|
+
|
2
|
+
% --DESC: Code 93
|
3
|
+
% --EXAM: THIS IS CODE 93
|
4
|
+
% --EXOP: includetext includecheck
|
5
|
+
% --RNDR: renlinear
|
6
|
+
/code93 {
|
7
|
+
|
8
|
+
0 begin % Confine variables to local scope
|
9
|
+
|
10
|
+
/options exch def % We are given an option string
|
11
|
+
/useropts options def
|
12
|
+
/barcode exch def % We are given a barcode string
|
13
|
+
|
14
|
+
/includecheck false def % Enable/disable checkdigit
|
15
|
+
/includetext false def % Enable/disable text
|
16
|
+
/textfont /Courier def
|
17
|
+
/textsize 10 def
|
18
|
+
/textyoffset -7 def
|
19
|
+
/height 1 def
|
20
|
+
|
21
|
+
% Parse the input options
|
22
|
+
options {
|
23
|
+
token false eq {exit} if dup length string cvs (=) search
|
24
|
+
true eq {cvlit exch pop exch def} {cvlit true def} ifelse
|
25
|
+
} loop
|
26
|
+
|
27
|
+
/textfont textfont cvlit def
|
28
|
+
/textsize textsize cvr def
|
29
|
+
/textyoffset textyoffset cvr def
|
30
|
+
/height height cvr def
|
31
|
+
|
32
|
+
/encs
|
33
|
+
[ (131112) (111213) (111312) (111411) (121113)
|
34
|
+
(121212) (121311) (111114) (131211) (141111)
|
35
|
+
(211113) (211212) (211311) (221112) (221211)
|
36
|
+
(231111) (112113) (112212) (112311) (122112)
|
37
|
+
(132111) (111123) (111222) (111321) (121122)
|
38
|
+
(131121) (212112) (212211) (211122) (211221)
|
39
|
+
(221121) (222111) (112122) (112221) (122121)
|
40
|
+
(123111) (121131) (311112) (311211) (321111)
|
41
|
+
(112131) (113121) (211131) (121221) (312111)
|
42
|
+
(311121) (122211) (111141) (1111411)
|
43
|
+
] def
|
44
|
+
|
45
|
+
% Create a string of the available characters
|
46
|
+
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
|
47
|
+
|
48
|
+
/barlen barcode length def % Length of the code
|
49
|
+
barcode {
|
50
|
+
(^) search false eq {pop exit} if
|
51
|
+
pop pop /barlen barlen 3 sub def
|
52
|
+
} loop
|
53
|
+
|
54
|
+
includecheck {
|
55
|
+
/sbs barlen 6 mul 25 add string def
|
56
|
+
} {
|
57
|
+
/sbs barlen 6 mul 13 add string def
|
58
|
+
} ifelse
|
59
|
+
/txt barlen array def
|
60
|
+
|
61
|
+
% Put the start character
|
62
|
+
sbs 0 encs 47 get putinterval
|
63
|
+
|
64
|
+
/checksum1 0 def /checksum2 0 def
|
65
|
+
|
66
|
+
/i 0 def /j 0 def
|
67
|
+
{ % loop
|
68
|
+
j barlen eq {exit} if
|
69
|
+
barcode i 1 getinterval (^) eq {
|
70
|
+
% indx is given by the next three characters
|
71
|
+
/indx barcode i 1 add 3 getinterval cvi def
|
72
|
+
txt j [( ) j 9 mul 9 add textyoffset textfont textsize] put
|
73
|
+
/i i 4 add def
|
74
|
+
} {
|
75
|
+
barchars barcode i 1 getinterval search
|
76
|
+
pop % Discard true leaving pre
|
77
|
+
length /indx exch def % indx is the length of pre
|
78
|
+
pop pop % Discard seek and post
|
79
|
+
txt j [barchars indx 1 getinterval j 9 mul 9 add textyoffset textfont textsize] put
|
80
|
+
/i i 1 add def
|
81
|
+
} ifelse
|
82
|
+
/enc encs indx get def % Get the indxth encoding
|
83
|
+
sbs j 6 mul 6 add enc putinterval % Put encoded digit into sbs
|
84
|
+
/checksum1 checksum1 barlen j sub 1 sub 20 mod 1 add indx mul add def
|
85
|
+
/checksum2 checksum2 barlen j sub 15 mod 1 add indx mul add def
|
86
|
+
/j j 1 add def
|
87
|
+
} loop
|
88
|
+
|
89
|
+
includecheck {
|
90
|
+
% Put the first checksum character
|
91
|
+
/checksum1 checksum1 47 mod def
|
92
|
+
/checksum2 checksum2 checksum1 add 47 mod def
|
93
|
+
sbs j 6 mul 6 add encs checksum1 get putinterval
|
94
|
+
sbs j 6 mul 12 add encs checksum2 get putinterval
|
95
|
+
% Put the end character
|
96
|
+
sbs j 6 mul 18 add encs 48 get putinterval
|
97
|
+
} {
|
98
|
+
% Put the end character
|
99
|
+
sbs j 6 mul 6 add encs 48 get putinterval
|
100
|
+
} ifelse
|
101
|
+
|
102
|
+
% Return the arguments
|
103
|
+
/retval 8 dict def
|
104
|
+
retval (ren) (renlinear) put
|
105
|
+
retval (sbs) [sbs {48 sub} forall] put
|
106
|
+
retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put
|
107
|
+
retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put
|
108
|
+
includetext {
|
109
|
+
retval (txt) txt put
|
110
|
+
} if
|
111
|
+
retval (opt) useropts put
|
112
|
+
retval
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
} bind def
|
117
|
+
/code93 load 0 1 dict put
|
@@ -0,0 +1,328 @@
|
|
1
|
+
|
2
|
+
% --DESC: Data Matrix
|
3
|
+
% --EXAM: ^142^164^186
|
4
|
+
% --EXOP: rows=32 columns=32
|
5
|
+
% --RNDR: renmatrix
|
6
|
+
/datamatrix {
|
7
|
+
|
8
|
+
0 begin
|
9
|
+
|
10
|
+
/options exch def
|
11
|
+
/useropts options def
|
12
|
+
/barcode exch def
|
13
|
+
|
14
|
+
/columns 0 def
|
15
|
+
/rows 0 def
|
16
|
+
|
17
|
+
% Parse the input options
|
18
|
+
options {
|
19
|
+
token false eq {exit} if dup length string cvs (=) search
|
20
|
+
true eq {cvlit exch pop exch def} {cvlit true def} ifelse
|
21
|
+
} loop
|
22
|
+
|
23
|
+
/columns columns cvi def
|
24
|
+
/rows rows cvi def
|
25
|
+
|
26
|
+
% Split the input barcode into an array of codewords
|
27
|
+
/cws barcode length array def
|
28
|
+
/i 0 def /j 0 def
|
29
|
+
{ % loop
|
30
|
+
i barcode length eq {exit} if
|
31
|
+
/cw barcode i 1 add 3 getinterval cvi def
|
32
|
+
cws j cw put
|
33
|
+
/i i 4 add def
|
34
|
+
/j j 1 add def
|
35
|
+
} loop
|
36
|
+
/cws cws 0 j getinterval def
|
37
|
+
|
38
|
+
% Basic metrics for the each symbol
|
39
|
+
% rows cols regh regv rscw rsbl
|
40
|
+
/metrics [
|
41
|
+
% Standard square symbols
|
42
|
+
[ 10 10 1 1 5 1 ]
|
43
|
+
[ 12 12 1 1 7 1 ]
|
44
|
+
[ 14 14 1 1 10 1 ]
|
45
|
+
[ 16 16 1 1 12 1 ]
|
46
|
+
[ 18 18 1 1 14 1 ]
|
47
|
+
[ 20 20 1 1 18 1 ]
|
48
|
+
[ 22 22 1 1 20 1 ]
|
49
|
+
[ 24 24 1 1 24 1 ]
|
50
|
+
[ 26 26 1 1 28 1 ]
|
51
|
+
[ 32 32 2 2 36 1 ]
|
52
|
+
[ 36 36 2 2 42 1 ]
|
53
|
+
[ 40 40 2 2 48 1 ]
|
54
|
+
[ 44 44 2 2 56 1 ]
|
55
|
+
[ 48 48 2 2 68 1 ]
|
56
|
+
[ 52 52 2 2 84 2 ]
|
57
|
+
[ 64 64 4 4 112 2 ]
|
58
|
+
[ 72 72 4 4 144 4 ]
|
59
|
+
[ 80 80 4 4 192 4 ]
|
60
|
+
[ 88 88 4 4 224 4 ]
|
61
|
+
[ 96 96 4 4 272 4 ]
|
62
|
+
[ 104 104 4 4 336 6 ]
|
63
|
+
[ 120 120 6 6 408 6 ]
|
64
|
+
[ 132 132 6 6 496 8 ]
|
65
|
+
[ 144 144 6 6 620 10 ]
|
66
|
+
% Optional rectangular symbols
|
67
|
+
[ 8 18 1 1 7 1 ]
|
68
|
+
[ 8 32 1 2 11 1 ]
|
69
|
+
[ 12 26 1 1 14 1 ]
|
70
|
+
[ 12 36 1 2 18 1 ]
|
71
|
+
[ 16 36 1 2 24 1 ]
|
72
|
+
[ 16 48 1 2 28 1 ]
|
73
|
+
] def
|
74
|
+
|
75
|
+
% Select metrics of an appropriate symbol
|
76
|
+
/urows rows def
|
77
|
+
/ucols columns def
|
78
|
+
/i 0 def
|
79
|
+
{ % loop
|
80
|
+
/m metrics i get def
|
81
|
+
/rows m 0 get def % Rows in symbol
|
82
|
+
/cols m 1 get def % Columns in symbol
|
83
|
+
/regh m 2 get def % Horizontal regions
|
84
|
+
/regv m 3 get def % Vertical regions
|
85
|
+
/rscw m 4 get def % Error correction codewords
|
86
|
+
/rsbl m 5 get def % Error correction blocks
|
87
|
+
/mrows rows 2 regh mul sub def % Rows in the mapping matrix
|
88
|
+
/mcols cols 2 regv mul sub def % Columns in the mapping matrix
|
89
|
+
/rrows mrows regh idiv def % Rows per region
|
90
|
+
/rcols mcols regv idiv def % Columns per region
|
91
|
+
/ncws mrows mcols mul 8 idiv rscw sub def % Data codewords
|
92
|
+
/okay true def
|
93
|
+
cws length ncws gt {/okay false def} if
|
94
|
+
urows 0 ne urows rows ne and {/okay false def} if
|
95
|
+
ucols 0 ne ucols cols ne and {/okay false def} if
|
96
|
+
okay {exit} if
|
97
|
+
/i i 1 add def
|
98
|
+
} loop
|
99
|
+
|
100
|
+
% Extend cws to ncws codewords by addition of pseudo-randomised pad characters
|
101
|
+
cws length ncws lt {
|
102
|
+
/datlen cws length def
|
103
|
+
/cws [ cws {} forall ncws datlen sub {129} repeat ] def
|
104
|
+
datlen 1 add 1 ncws 1 sub {
|
105
|
+
/i exch def
|
106
|
+
i 1 add 149 mul 253 mod 1 add 129 add
|
107
|
+
dup 254 gt {254 sub} if
|
108
|
+
cws exch i exch put
|
109
|
+
} for
|
110
|
+
} if
|
111
|
+
|
112
|
+
% De-interleave the codewords into blocks
|
113
|
+
/cwbs rsbl array def % Array of data codeword blocks
|
114
|
+
/ecbs rsbl array def % Array of error correction blocks
|
115
|
+
0 1 rsbl 1 sub {
|
116
|
+
/i exch def
|
117
|
+
cws length 1558 ne {
|
118
|
+
/cwbsize cws length rsbl idiv def
|
119
|
+
} {
|
120
|
+
i 7 le {/cwbsize 156 def} {/cwbsize 155 def} ifelse
|
121
|
+
} ifelse
|
122
|
+
/cwb cwbsize array def
|
123
|
+
0 1 cwbsize 1 sub {
|
124
|
+
/j exch def
|
125
|
+
cwb j cws j rsbl mul i add get put
|
126
|
+
} for
|
127
|
+
cwbs i cwb put
|
128
|
+
ecbs i [ rscw rsbl idiv {0} repeat ] put
|
129
|
+
} for
|
130
|
+
|
131
|
+
% Calculate the log and anti-log tables
|
132
|
+
/rslog [ -255 255 {0} repeat ] def
|
133
|
+
/rsalog [ 1 255 {0} repeat ] def
|
134
|
+
1 1 255 {
|
135
|
+
/i exch def
|
136
|
+
rsalog i rsalog i 1 sub get 2 mul put
|
137
|
+
rsalog i get 256 ge { rsalog i rsalog i get 301 xor put } if
|
138
|
+
rslog rsalog i get i put
|
139
|
+
} for
|
140
|
+
|
141
|
+
% Function to calculate the product in the field
|
142
|
+
/rsprod {
|
143
|
+
/y exch def
|
144
|
+
/x exch def
|
145
|
+
x y mul 0 ne {
|
146
|
+
rsalog rslog x get rslog y get add 255 mod get
|
147
|
+
} {
|
148
|
+
0
|
149
|
+
} ifelse
|
150
|
+
} bind def
|
151
|
+
|
152
|
+
% Generate the coefficients
|
153
|
+
/coeffs [ 1 rscw rsbl idiv {0} repeat ] def
|
154
|
+
1 1 rscw rsbl idiv {
|
155
|
+
/i exch def
|
156
|
+
coeffs i coeffs i 1 sub get put
|
157
|
+
i 1 sub -1 1 {
|
158
|
+
/j exch def
|
159
|
+
coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put
|
160
|
+
} for
|
161
|
+
coeffs 0 coeffs 0 get rsalog i get rsprod put
|
162
|
+
} for
|
163
|
+
/coeffs coeffs 0 coeffs length 1 sub getinterval def
|
164
|
+
|
165
|
+
% Calculate the error correction codewords for each block
|
166
|
+
0 1 cwbs length 1 sub {
|
167
|
+
/i exch def
|
168
|
+
/cwb cwbs i get def
|
169
|
+
/ecb ecbs i get def
|
170
|
+
0 1 cwb length 1 sub {
|
171
|
+
/t exch cwb exch get ecb 0 get xor def
|
172
|
+
ecb length 1 sub -1 0 {
|
173
|
+
/j exch def
|
174
|
+
/p ecb length j sub 1 sub def
|
175
|
+
t 0 eq {
|
176
|
+
ecb p 0 put
|
177
|
+
} {
|
178
|
+
ecb p rsalog rslog t get rslog coeffs j get get add 255 mod get put
|
179
|
+
} ifelse
|
180
|
+
j 0 gt { ecb p ecb p 1 add get ecb p get xor put } if
|
181
|
+
} for
|
182
|
+
} for
|
183
|
+
ecbs i ecb put
|
184
|
+
} for
|
185
|
+
|
186
|
+
% Extend codewords with the interleaved error correction codes
|
187
|
+
/cws [ cws {} forall rscw {0} repeat ] def
|
188
|
+
0 1 rscw 1 sub {
|
189
|
+
/i exch def
|
190
|
+
cws ncws i add ecbs i rsbl mod get i rsbl idiv get put
|
191
|
+
} for
|
192
|
+
|
193
|
+
% Create the module placement matrix
|
194
|
+
/module {
|
195
|
+
/tmpc exch def
|
196
|
+
/tmpr exch def
|
197
|
+
tmpr 0 lt {
|
198
|
+
/tmpr tmpr mrows add def
|
199
|
+
/tmpc tmpc 4 mrows 4 add 8 mod sub add def
|
200
|
+
} if
|
201
|
+
tmpc 0 lt {
|
202
|
+
/tmpc tmpc mcols add def
|
203
|
+
/tmpr tmpr 4 mcols 4 add 8 mod sub add def
|
204
|
+
} if
|
205
|
+
mmat tmpr mcols mul tmpc add bit put
|
206
|
+
/bit bit 1 add def
|
207
|
+
} bind def
|
208
|
+
|
209
|
+
/mmat [ mrows mcols mul {-1} repeat ] def
|
210
|
+
/bit 0 def /row 4 def /col 0 def
|
211
|
+
{ % loop
|
212
|
+
|
213
|
+
row mrows eq col 0 eq and {
|
214
|
+
[ [mrows 1 sub 0] [mrows 1 sub 1] [mrows 1 sub 2] [0 mcols 2 sub]
|
215
|
+
[0 mcols 1 sub] [1 mcols 1 sub] [2 mcols 1 sub] [3 mcols 1 sub] ]
|
216
|
+
{{} forall module} forall
|
217
|
+
} if
|
218
|
+
row mrows 2 sub eq col 0 eq and mcols 4 mod 0 ne and {
|
219
|
+
[ [mrows 3 sub 0] [mrows 2 sub 0] [mrows 1 sub 0] [0 mcols 4 sub]
|
220
|
+
[0 mcols 3 sub] [0 mcols 2 sub] [0 mcols 1 sub] [1 mcols 1 sub] ]
|
221
|
+
{{} forall module} forall
|
222
|
+
} if
|
223
|
+
row mrows 2 sub eq col 0 eq and mcols 8 mod 4 eq and {
|
224
|
+
[ [mrows 3 sub 0] [mrows 2 sub 0] [mrows 1 sub 0] [0 mcols 2 sub]
|
225
|
+
[0 mcols 1 sub] [1 mcols 1 sub] [2 mcols 1 sub] [3 mcols 1 sub] ]
|
226
|
+
{{} forall module} forall
|
227
|
+
} if
|
228
|
+
row mrows 4 add eq col 2 eq and mcols 8 mod 0 eq and {
|
229
|
+
[ [mrows 1 sub 0] [mrows 1 sub mcols 1 sub] [0 mcols 3 sub] [0 mcols 2 sub]
|
230
|
+
[0 mcols 1 sub] [1 mcols 3 sub] [1 mcols 2 sub] [1 mcols 1 sub] ]
|
231
|
+
{{} forall module} forall
|
232
|
+
} if
|
233
|
+
|
234
|
+
{ % loop for sweeping upwards
|
235
|
+
row mrows lt col 0 ge and {
|
236
|
+
mmat row mcols mul col add get -1 eq {
|
237
|
+
[ [row 2 sub col 2 sub] [row 2 sub col 1 sub] [row 1 sub col 2 sub] [row 1 sub col 1 sub]
|
238
|
+
[row 1 sub col] [row col 2 sub] [row col 1 sub] [row col] ]
|
239
|
+
{{} forall module} forall
|
240
|
+
} if
|
241
|
+
} if
|
242
|
+
/row row 2 sub def
|
243
|
+
/col col 2 add def
|
244
|
+
row 0 ge col mcols lt and not {exit} if
|
245
|
+
} loop
|
246
|
+
/row row 1 add def
|
247
|
+
/col col 3 add def
|
248
|
+
|
249
|
+
{ % loop for sweeping downwards
|
250
|
+
row 0 ge col mcols lt and {
|
251
|
+
mmat row mcols mul col add get -1 eq {
|
252
|
+
[ [row 2 sub col 2 sub] [row 2 sub col 1 sub] [row 1 sub col 2 sub] [row 1 sub col 1 sub]
|
253
|
+
[row 1 sub col] [row col 2 sub] [row col 1 sub] [row col] ]
|
254
|
+
{{} forall module} forall
|
255
|
+
} if
|
256
|
+
} if
|
257
|
+
/row row 2 add def
|
258
|
+
/col col 2 sub def
|
259
|
+
row mrows lt col 0 ge and not {exit} if
|
260
|
+
} loop
|
261
|
+
/row row 3 add def
|
262
|
+
/col col 1 add def
|
263
|
+
|
264
|
+
row mrows lt col mcols lt or not {exit} if
|
265
|
+
} loop
|
266
|
+
|
267
|
+
% Set checker pattern if required
|
268
|
+
mmat mrows mcols mul 1 sub get -1 eq {
|
269
|
+
mmat mrows mcols 1 sub mul 2 sub [-1 -2] putinterval
|
270
|
+
mmat mrows mcols mul 2 sub [-2 -1] putinterval
|
271
|
+
} if
|
272
|
+
|
273
|
+
% Invert the map to form the mapping matrix correcting the checker case
|
274
|
+
/modmap mrows mcols mul 8 idiv 8 mul array def
|
275
|
+
0 1 mmat length 1 sub {
|
276
|
+
/i exch def
|
277
|
+
mmat i get 0 ge {
|
278
|
+
modmap mmat i get i put
|
279
|
+
} {
|
280
|
+
mmat i mmat i get 2 add put
|
281
|
+
} ifelse
|
282
|
+
} for
|
283
|
+
|
284
|
+
% Place the codewords in the matrix according to the mapping matrix
|
285
|
+
0 1 cws length 1 sub {
|
286
|
+
/i exch def
|
287
|
+
[ 8 {0} repeat cws i get 2 8 string cvrs {48 sub} forall ]
|
288
|
+
dup length 8 sub 8 getinterval /bits exch def
|
289
|
+
0 1 7 {
|
290
|
+
/j exch def
|
291
|
+
mmat modmap i 8 mul j add get bits j get put
|
292
|
+
} for
|
293
|
+
} for
|
294
|
+
|
295
|
+
% Place the modules onto a pixel map between alignment patterns
|
296
|
+
/pixs rows cols mul array def
|
297
|
+
/cwpos 0 def
|
298
|
+
0 1 rows 1 sub {
|
299
|
+
/i exch def
|
300
|
+
i rrows 2 add mod 0 eq { pixs i cols mul [ cols 2 idiv {1 0} repeat ] putinterval } if
|
301
|
+
i rrows 2 add mod rrows 1 add eq { pixs i cols mul [ cols {1} repeat ] putinterval } if
|
302
|
+
i rrows 2 add mod 0 ne i rrows 2 add mod rrows 1 add ne and {
|
303
|
+
0 1 cols 1 sub {
|
304
|
+
/j exch def
|
305
|
+
j rcols 2 add mod 0 eq { pixs i cols mul j add 1 put } if
|
306
|
+
j rcols 2 add mod rcols 1 add eq { pixs i cols mul j add i 2 mod put } if
|
307
|
+
j rcols 2 add mod 0 ne j rcols 2 add mod rcols 1 add ne and {
|
308
|
+
pixs i cols mul j add mmat cwpos get put
|
309
|
+
/cwpos cwpos 1 add def
|
310
|
+
} if
|
311
|
+
} for
|
312
|
+
} if
|
313
|
+
} for
|
314
|
+
|
315
|
+
/retval 7 dict def
|
316
|
+
retval (ren) (renmatrix) put
|
317
|
+
retval (pixs) pixs put
|
318
|
+
retval (pixx) cols put
|
319
|
+
retval (pixy) rows put
|
320
|
+
retval (height) rows 72 div 1.5 mul put
|
321
|
+
retval (width) cols 72 div 1.5 mul put
|
322
|
+
retval (opt) useropts put
|
323
|
+
retval
|
324
|
+
|
325
|
+
end
|
326
|
+
|
327
|
+
} bind def
|
328
|
+
/datamatrix load 0 1 dict put
|
@@ -0,0 +1,183 @@
|
|
1
|
+
%!PS-Adobe-2.0
|
2
|
+
%%Creator: Terry Burton
|
3
|
+
%%DocumentPaperSizes: a4
|
4
|
+
%%EndComments
|
5
|
+
%%EndProlog
|
6
|
+
|
7
|
+
% Barcode Writer in Pure PostScript - Version 2008-04-06-1
|
8
|
+
% http://www.terryburton.co.uk/barcodewriter/
|
9
|
+
%
|
10
|
+
% Copyright (c) 2008 Terry Burton - tez@terryburton.co.uk
|
11
|
+
%
|
12
|
+
% Permission is hereby granted, free of charge, to any
|
13
|
+
% person obtaining a copy of this software and associated
|
14
|
+
% documentation files (the "Software"), to deal in the
|
15
|
+
% Software without restriction, including without
|
16
|
+
% limitation the rights to use, copy, modify, merge,
|
17
|
+
% publish, distribute, sublicense, and/or sell copies of
|
18
|
+
% the Software, and to permit persons to whom the Software
|
19
|
+
% is furnished to do so, subject to the following
|
20
|
+
% conditions:
|
21
|
+
%
|
22
|
+
% The above copyright notice and this permission notice
|
23
|
+
% shall be included in all copies or substantial portions
|
24
|
+
% of the Software.
|
25
|
+
%
|
26
|
+
% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
27
|
+
% KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
28
|
+
% THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
29
|
+
% PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
30
|
+
% THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
31
|
+
% DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
32
|
+
% CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
33
|
+
% CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
34
|
+
% IN THE SOFTWARE.
|
35
|
+
|
36
|
+
% Uncomment this next line to allow these procedure definitions to
|
37
|
+
% remain resident within a printer's PostScript virtual machine
|
38
|
+
% so that the barcode generation capability persists between jobs.
|
39
|
+
|
40
|
+
% serverdict begin 0 exitserver
|
41
|
+
|
42
|
+
% --BEGIN TEMPLATE--
|
43
|
+
|
44
|
+
% --DESC: EAN-13
|
45
|
+
% --EXAM: 977147396801
|
46
|
+
% --EXOP: includetext guardwhitespace
|
47
|
+
% --RNDR: renlinear
|
48
|
+
/ean13 {
|
49
|
+
|
50
|
+
0 begin
|
51
|
+
|
52
|
+
/options exch def % We are given an option string
|
53
|
+
/useropts options def
|
54
|
+
/barcode exch def % We are given a barcode string
|
55
|
+
|
56
|
+
/includetext false def % Enable/disable text
|
57
|
+
/textfont /Helvetica def
|
58
|
+
/textsize 12 def
|
59
|
+
/textyoffset -4 def
|
60
|
+
/height 1 def
|
61
|
+
|
62
|
+
% Parse the input options
|
63
|
+
options {
|
64
|
+
token false eq {exit} if dup length string cvs (=) search
|
65
|
+
true eq {cvlit exch pop exch def} {cvlit true def} ifelse
|
66
|
+
} loop
|
67
|
+
|
68
|
+
/textfont textfont cvlit def
|
69
|
+
/textsize textsize cvr def
|
70
|
+
/textyoffset textyoffset cvr def
|
71
|
+
/height height cvr def
|
72
|
+
|
73
|
+
/barlen barcode length def % Length of the code
|
74
|
+
|
75
|
+
% Add checksum digit to barcode if length is even
|
76
|
+
barlen 2 mod 0 eq {
|
77
|
+
/pad barlen 1 add string def % Create pad one bigger than barcode
|
78
|
+
/checksum 0 def
|
79
|
+
0 1 barlen 1 sub {
|
80
|
+
/i exch def
|
81
|
+
/barchar barcode i get 48 sub def
|
82
|
+
i 2 mod 0 eq {
|
83
|
+
/checksum barchar checksum add def
|
84
|
+
} {
|
85
|
+
/checksum barchar 3 mul checksum add def
|
86
|
+
} ifelse
|
87
|
+
} for
|
88
|
+
/checksum 10 checksum 10 mod sub 10 mod def
|
89
|
+
pad 0 barcode putinterval % Add barcode to the start of the pad
|
90
|
+
pad barlen checksum 48 add put % Put ascii for checksum at end of pad
|
91
|
+
/barcode pad def % barcode=pad
|
92
|
+
/barlen barlen 1 add def % barlen++
|
93
|
+
} if
|
94
|
+
|
95
|
+
% Create an array containing the character mappings
|
96
|
+
/encs
|
97
|
+
[ (3211) (2221) (2122) (1411) (1132)
|
98
|
+
(1231) (1114) (1312) (1213) (3112)
|
99
|
+
(111) (11111) (111)
|
100
|
+
] def
|
101
|
+
|
102
|
+
% Create a string of the available characters
|
103
|
+
/barchars (0123456789) def
|
104
|
+
|
105
|
+
% Digits to mirror on left side
|
106
|
+
/mirrormaps
|
107
|
+
[ (000000) (001011) (001101) (001110) (010011)
|
108
|
+
(011001) (011100) (010101) (010110) (011010)
|
109
|
+
] def
|
110
|
+
|
111
|
+
/sbs barlen 1 sub 4 mul 11 add string def
|
112
|
+
/txt barlen array def
|
113
|
+
|
114
|
+
% Put the start character
|
115
|
+
sbs 0 encs 10 get putinterval
|
116
|
+
|
117
|
+
% First digit - determine mirrormap by this and show before guard bars
|
118
|
+
/mirrormap mirrormaps barcode 0 get 48 sub get def
|
119
|
+
txt 0 [barcode 0 1 getinterval -10 textyoffset textfont textsize] put
|
120
|
+
|
121
|
+
% Left side - performs mirroring
|
122
|
+
1 1 6 {
|
123
|
+
% Lookup the encoding for the each barcode character
|
124
|
+
/i exch def
|
125
|
+
barcode i 1 getinterval barchars exch search
|
126
|
+
pop % Discard true leaving pre
|
127
|
+
length /indx exch def % indx is the length of pre
|
128
|
+
pop pop % Discard seek and post
|
129
|
+
/enc encs indx get def % Get the indxth encoding
|
130
|
+
mirrormap i 1 sub get 49 eq { % Reverse enc if 1 in this position in mirrormap
|
131
|
+
/enclen enc length def
|
132
|
+
/revenc enclen string def
|
133
|
+
0 1 enclen 1 sub {
|
134
|
+
/j exch def
|
135
|
+
/char enc j get def
|
136
|
+
revenc enclen j sub 1 sub char put
|
137
|
+
} for
|
138
|
+
/enc revenc def
|
139
|
+
} if
|
140
|
+
sbs i 1 sub 4 mul 3 add enc putinterval % Put encoded digit into sbs
|
141
|
+
txt i [barcode i 1 getinterval i 1 sub 7 mul 4 add textyoffset textfont textsize] put
|
142
|
+
} for
|
143
|
+
|
144
|
+
% Put the middle character
|
145
|
+
sbs 7 1 sub 4 mul 3 add encs 11 get putinterval
|
146
|
+
|
147
|
+
% Right side
|
148
|
+
7 1 12 {
|
149
|
+
% Lookup the encoding for the each barcode character
|
150
|
+
/i exch def
|
151
|
+
barcode i 1 getinterval barchars exch search
|
152
|
+
pop % Discard true leaving pre
|
153
|
+
length /indx exch def % indx is the length of pre
|
154
|
+
pop pop % Discard seek and post
|
155
|
+
/enc encs indx get def % Get the indxth encoding
|
156
|
+
sbs i 1 sub 4 mul 8 add enc putinterval % Put encoded digit into sbs
|
157
|
+
txt i [barcode i 1 getinterval i 1 sub 7 mul 8 add textyoffset textfont textsize] put
|
158
|
+
} for
|
159
|
+
|
160
|
+
% Put the end character
|
161
|
+
sbs barlen 1 sub 4 mul 8 add encs 12 get putinterval
|
162
|
+
|
163
|
+
% Return the arguments
|
164
|
+
/retval 8 dict def
|
165
|
+
retval (ren) (renlinear) put
|
166
|
+
retval (sbs) [sbs {48 sub} forall] put
|
167
|
+
includetext {
|
168
|
+
retval (bhs) [height height 12{height .075 sub}repeat height height 12{height .075 sub}repeat height height] put
|
169
|
+
retval (bbs) [0 0 12{.075}repeat 0 0 12{.075}repeat 0 0] put
|
170
|
+
retval (txt) txt put
|
171
|
+
} {
|
172
|
+
retval (bhs) [30{height}repeat] put
|
173
|
+
retval (bbs) [30{0}repeat] put
|
174
|
+
} ifelse
|
175
|
+
retval (opt) useropts put
|
176
|
+
retval (guardrightpos) 10 put
|
177
|
+
retval (borderbottom) 5 put
|
178
|
+
retval
|
179
|
+
|
180
|
+
end
|
181
|
+
|
182
|
+
} bind def
|
183
|
+
/ean13 load 0 1 dict put
|