Skip to content

Commit f6aa73c

Browse files
committed
Convert symbologies to textxalign=centre where direct position is not required
1 parent 07aab19 commit f6aa73c

25 files changed

Lines changed: 130 additions & 203 deletions

CHANGES

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
XXXX-XX-XX
1+
2026-03-24
22

3-
*
3+
* The text renderer now centres each character using stringwidth and pathbbox for font-independent alignment in the direct text positioning path.
4+
* Text offsets were adjusted for EAN/UPC-based symbologies and addons to account for ink-centre anchoring. Non-EAN encoders with per-character text placement were converted to use centre-aligned single string rendering.
45

56

67
2026-03-13

src/auspost.ps.src

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,6 @@ begin
166166
/bwipp.auspostTooShort (The data length must be at least 10) //raiseerror exec
167167
} if
168168

169-
/txt barlen 2 sub array def
170169

171170
//auspost.fcclen barlen 2 ge { barcode 0 2 getinterval } { () } ifelse
172171
2 copy known not {
@@ -215,7 +214,6 @@ begin
215214
/i exch def
216215
//auspost.encs barcode i 1 getinterval cvi 64 add get
217216
encstr i 2 mul 2 add 3 2 roll putinterval
218-
txt i 2 sub [barcode i 1 getinterval i 2 sub 2 mul 6 add 3.312 mul textyoffset textfont textsize] put
219217
} for
220218

221219
%
@@ -230,7 +228,6 @@ begin
230228
} if
231229
48 sub 64 add get
232230
encstr i 2 mul 22 add 3 2 roll putinterval
233-
txt i 8 add [barcode i 10 add 1 getinterval i 2 mul 22 add 3.312 mul textyoffset textfont textsize] put
234231
} for
235232
/ciflen barlen 10 sub 2 mul def
236233
} {
@@ -244,7 +241,6 @@ begin
244241
pop pop
245242
/enc //auspost.encs indx get def
246243
encstr i 3 mul 22 add enc putinterval
247-
txt i 8 add [barcode i 10 add 1 getinterval i 3 mul 22 add 3.312 mul textyoffset textfont textsize] put
248244
} for
249245
/ciflen barlen 10 sub 3 mul def
250246
} ifelse
@@ -323,7 +319,8 @@ begin
323319
/bhs bhs
324320
/sbs [bhs length 1 sub {1.44 1.872} repeat 1.44]
325321
includetext {
326-
/txt txt
322+
/txt [ [barcode 2 barlen 2 sub getinterval 0 0 textfont textsize] ]
323+
/textxalign (center)
327324
} if
328325
/opt options
329326
>>

src/bc412.ps.src

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -197,29 +197,21 @@ begin
197197
} ifelse
198198

199199
/sbs barlen 1 add 8 mul 5 add string def
200-
includecheck {
201-
/txt barlen 1 add array def
202-
} {
203-
/txt barlen array def
204-
} ifelse
205200

206201
%
207202
% Put the start character
208203
%
209204
includestartstop {
210205
sbs 0 //bc412.encs 35 get putinterval
211206
/pos 2 def
212-
/txtpos 3.0 def
213207
} {
214208
/pos 0 def
215-
/txtpos 0.0 def
216209
} ifelse
217210

218211
0 1 barlen 1 sub {
219212
/i exch def
220213
/indx charvals barcode i 1 getinterval get def
221214
sbs pos //bc412.encs indx get putinterval
222-
txt i [barcode i 1 getinterval i 12 mul txtpos add textyoffset textfont textsize] put
223215
/pos pos 8 add def
224216
} for
225217

@@ -228,11 +220,6 @@ begin
228220
%
229221
includecheck {
230222
sbs pos //bc412.encs checksum get putinterval
231-
includecheckintext {
232-
txt barlen [//bc412.barchars checksum 1 getinterval barlen 12 mul txtpos add textyoffset textfont textsize] put
233-
} {
234-
txt barlen [() barlen 12 mul txtpos add textyoffset textfont textsize] put
235-
} ifelse
236223
/pos pos 8 add def
237224
} if
238225

@@ -244,14 +231,19 @@ begin
244231
/pos pos 3 add def
245232
} if
246233

234+
/text includecheck includecheckintext and {
235+
barlen 1 add string dup 0 barcode putinterval dup barlen //bc412.barchars checksum 1 getinterval putinterval
236+
} { barcode } ifelse def
237+
247238
/sbs sbs 0 pos getinterval def
248239
<<
249240
/ren /renlinear
250241
/sbs [sbs {48 sub} forall]
251242
/bhs [sbs length 1 add 2 idiv {height} repeat]
252243
/bbs [sbs length 1 add 2 idiv {0} repeat]
253244
includetext {
254-
/txt txt
245+
/txt [ [text 0 0 textfont textsize] ]
246+
/textxalign (center)
255247
} if
256248
/opt options
257249
>>

src/code11.ps.src

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -158,23 +158,17 @@ begin
158158
} if
159159

160160
/sbs barlen numchecks add 6 mul 12 add string def
161-
/txt barlen numchecks add array def
162161

163162
%
164163
% Put the start character
165164
%
166165
sbs 0 //code11.encs 11 get putinterval
167166

168-
/xpos 8 def
169167
0 1 barlen 1 sub {
170168
/i exch def
171169
/indx charvals barcode i 1 getinterval get def
172170
/enc //code11.encs indx get def
173171
sbs i 6 mul 6 add enc putinterval
174-
txt i [barcode i 1 getinterval xpos textyoffset textfont textsize] put
175-
0 1 5 { % xpos+=width of the character
176-
/xpos exch enc exch get 48 sub xpos add def
177-
} for
178172
} for
179173

180174
%
@@ -184,38 +178,34 @@ begin
184178
barlen 10 ge {
185179
sbs barlen 6 mul 6 add //code11.encs checksum1 get putinterval
186180
sbs barlen 6 mul 12 add //code11.encs checksum2 get putinterval
187-
includecheckintext {
188-
txt barlen [//code11.barchars checksum1 1 getinterval xpos textyoffset textfont textsize] put
189-
/enc //code11.encs checksum1 get def
190-
0 1 5 { % xpos+=width of the character
191-
/xpos exch enc exch get 48 sub xpos add def
192-
} for
193-
txt barlen 1 add [//code11.barchars checksum2 1 getinterval xpos textyoffset textfont textsize] put
194-
} {
195-
txt barlen [() xpos textyoffset textfont textsize] put
196-
txt barlen 1 add [() xpos textyoffset textfont textsize] put
197-
} ifelse
198181
sbs barlen 6 mul 18 add //code11.encs 11 get putinterval
199182
} {
200183
sbs barlen 6 mul 6 add //code11.encs checksum1 get putinterval
201-
includecheckintext {
202-
txt barlen [//code11.barchars checksum1 1 getinterval xpos textyoffset textfont textsize] put
203-
} {
204-
txt barlen [() xpos textyoffset textfont textsize] put
205-
} ifelse
206184
sbs barlen 6 mul 12 add //code11.encs 11 get putinterval
207185
} ifelse
208186
} {
209187
sbs barlen 6 mul 6 add //code11.encs 11 get putinterval
210188
} ifelse
211189

190+
/text includecheck includecheckintext and {
191+
barlen 10 ge {
192+
barlen 2 add string dup 0 barcode putinterval
193+
dup barlen //code11.barchars checksum1 1 getinterval putinterval
194+
dup barlen 1 add //code11.barchars checksum2 1 getinterval putinterval
195+
} {
196+
barlen 1 add string dup 0 barcode putinterval
197+
dup barlen //code11.barchars checksum1 1 getinterval putinterval
198+
} ifelse
199+
} { barcode } ifelse def
200+
212201
<<
213202
/ren /renlinear
214203
/sbs [sbs {48 sub} forall]
215204
/bhs [sbs length 1 add 2 idiv {height} repeat]
216205
/bbs [sbs length 1 add 2 idiv {0} repeat]
217206
includetext {
218-
/txt txt
207+
/txt [ [text 0 0 textfont textsize] ]
208+
/textxalign (center)
219209
} if
220210
/opt options
221211
>>

src/code2of5.ps.src

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ begin
143143
/es encs 11 get length def
144144

145145
/sbs barlen includecheck {1 add} if cs mul ss add es add string def
146-
/txt barlen includecheck {1 add} if array def
147146

148147
%
149148
% Put the start character
@@ -158,7 +157,6 @@ begin
158157
pop pop % Discard seek and post
159158
/enc encs indx get def % Get the indxth encoding
160159
sbs i cs mul ss add enc putinterval % Put encoded digit into sbs
161-
txt i [barcode i 1 getinterval i cw mul sw add textyoffset textfont textsize] put
162160
} for
163161

164162
%
@@ -167,22 +165,22 @@ begin
167165
includecheck {
168166
sbs barlen cs mul ss add encs checksum get putinterval
169167
sbs barlen cs mul cs add ss add encs 11 get putinterval
170-
includecheckintext {
171-
txt barlen [//code2of5.barchars checksum 1 getinterval barlen cw mul sw add textyoffset textfont textsize] put
172-
} {
173-
txt barlen [( ) barlen cw mul sw add textyoffset textfont textsize] put
174-
} ifelse
175168
} {
176169
sbs barlen cs mul ss add encs 11 get putinterval
177170
} ifelse
178171

172+
/text includecheck includecheckintext and {
173+
barlen 1 add string dup 0 barcode putinterval dup barlen //code2of5.barchars checksum 1 getinterval putinterval
174+
} { barcode } ifelse def
175+
179176
<<
180177
/ren /renlinear
181178
/sbs [sbs {48 sub} forall]
182179
/bhs [sbs length 1 add 2 idiv {height} repeat]
183180
/bbs [sbs length 1 add 2 idiv {0} repeat]
184181
includetext {
185-
/txt txt
182+
/txt [ [text 0 0 textfont textsize] ]
183+
/textxalign (center)
186184
} if
187185
/opt options
188186
>>

src/code39.ps.src

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -148,57 +148,50 @@ begin
148148
} if
149149

150150
/sbs barlen includecheck {3} {2} ifelse add 10 mul string def
151-
/txt barlen includecheck {3} {2} ifelse add array def
152151

153152
%
154153
% Put the start character
155154
%
156155
sbs 0 //code39.encs 43 get putinterval
157-
hidestars not {
158-
txt 0 [(*) 0 textyoffset textfont textsize] put
159-
} {
160-
txt 0 [() 0 textyoffset textfont textsize] put
161-
} ifelse
162156

163157
0 1 barlen 1 sub {
164158
/i exch def
165159
/indx charvals barcode i 1 getinterval get def
166160
sbs i 10 mul 10 add //code39.encs indx get putinterval
167-
txt i 1 add [barcode i 1 getinterval i 1 add 16 mul textyoffset textfont textsize] put
168161
} for
169162

170163
%
171164
% Put the checksum and end characters
172165
%
173166
includecheck {
174167
sbs barlen 10 mul 10 add //code39.encs checksum get putinterval
175-
includecheckintext {
176-
txt barlen 1 add [//code39.barchars checksum 1 getinterval barlen 1 add 16 mul textyoffset textfont textsize] put
177-
} {
178-
txt barlen 1 add [() barlen 1 add 16 mul textyoffset textfont textsize] put
179-
} ifelse
180168
sbs barlen 10 mul 20 add //code39.encs 43 get putinterval
181-
hidestars not {
182-
txt barlen 2 add [(*) barlen 2 add 16 mul textyoffset textfont textsize] put
183-
} {
184-
txt barlen 2 add [() barlen 2 add 16 mul textyoffset textfont textsize] put
185-
} ifelse
186169
} {
187170
sbs barlen 10 mul 10 add //code39.encs 43 get putinterval
188-
hidestars not {
189-
txt barlen 1 add [(*) barlen 1 add 16 mul textyoffset textfont textsize] put
190-
} {
191-
txt barlen 1 add [() barlen 1 add 16 mul textyoffset textfont textsize] put
192-
} ifelse
193171
} ifelse
194172

173+
% Build display text: [*] data [check] [*]
174+
/slen hidestars not { 2 } { 0 } ifelse
175+
barlen add
176+
includecheck includecheckintext and { 1 add } if
177+
def
178+
/text slen string def
179+
/tpos 0 def
180+
hidestars not { text tpos (*) putinterval /tpos tpos 1 add def } if
181+
text tpos barcode putinterval /tpos tpos barlen add def
182+
includecheck includecheckintext and {
183+
text tpos //code39.barchars checksum 1 getinterval putinterval /tpos tpos 1 add def
184+
} if
185+
hidestars not { text tpos (*) putinterval } if
186+
195187
<<
196188
/ren /renlinear
197189
/sbs [sbs {48 sub} forall]
198190
/bhs [sbs length 1 add 2 idiv {height} repeat]
199191
/bbs [sbs length 1 add 2 idiv {0} repeat]
200192
includetext {
201-
/txt txt
193+
/txt [ [text 0 0 textfont textsize] ]
194+
/textxalign (center)
202195
} if
203196
/opt options
204197
>>

src/code93.ps.src

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,20 +153,18 @@ begin
153153
} {
154154
/sbs msglen 6 mul 13 add string def
155155
} ifelse
156-
/txt msglen array def
157-
158156
%
159157
% Put the start character
160158
%
161159
sbs 0 //code93.encs 47 get putinterval
162160

163161
/checksum1 0 def /checksum2 0 def
162+
/text msglen string def
164163
0 1 msglen 1 sub {
165164
/i exch def
166165
/indx charvals msg i get get def
167166
sbs i 6 mul 6 add //code93.encs indx get putinterval
168-
/char msg i get dup 0 lt { pop ( ) } { 1 string dup 0 4 -1 roll put } ifelse def
169-
txt i [char i 9 mul 9 add textyoffset textfont textsize] put
167+
text i msg i get dup 0 lt { pop 32 } if put
170168
/checksum1 checksum1 msglen i sub 1 sub 20 mod 1 add indx mul add def
171169
/checksum2 checksum2 msglen i sub 15 mod 1 add indx mul add def
172170
} for
@@ -194,7 +192,8 @@ begin
194192
/bhs [sbs length 1 add 2 idiv {height} repeat]
195193
/bbs [sbs length 1 add 2 idiv {0} repeat]
196194
includetext {
197-
/txt txt
195+
/txt [ [text 0 0 textfont textsize] ]
196+
/textxalign (center)
198197
} if
199198
/opt options
200199
>>

src/ean13.ps.src

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
%
44
% vim: set sw=4 sts=4 et:
55
%
6-
% Copyright (c) 2004-2025 Terry Burton
6+
% Copyright (c) 2004-2026 Terry Burton
77
%
88
% $Id$
99
%
@@ -68,8 +68,8 @@ begin
6868
/includetext false def
6969
/textfont /Helvetica def
7070
/textsize 12.0 def
71-
/textxoffset -11.0 def
72-
/textyoffset -4.0 def
71+
/textxoffset -7.75 def
72+
/textyoffset -.25 def
7373
/height 1.0 def
7474
/addongap 12.0 def
7575
/addontextfont (unset) def
@@ -218,7 +218,7 @@ begin
218218
/addopts <<
219219
/includetext true
220220
/height height includetext { 0.15 sub } if
221-
/textxoffset addontextxoffset null ne {addontextxoffset} {95 addongap add} ifelse
221+
/textxoffset addontextxoffset null ne {addontextxoffset} {98.25 addongap add} ifelse
222222
addontextyoffset null ne {/textyoffset addontextyoffset} if
223223
/textsize addontextsize null ne {addontextsize} {textsize} ifelse
224224
/textfont addontextfont (unset) ne {addontextfont} {textfont} ifelse

src/ean2.ps.src

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ begin
6565
/includetext false def
6666
/textfont /Helvetica def
6767
/textsize 12.0 def
68-
/textxoffset 0.0 def
68+
/textxoffset 3.25 def
6969
/textyoffset null def % sentinel realtype
7070
/height 0.7 def
7171

@@ -78,7 +78,7 @@ begin
7878
def
7979

8080
textyoffset null eq {
81-
/textyoffset height 72 mul 1 add def
81+
/textyoffset height 72 mul 5.75 add def
8282
} if
8383

8484
%

0 commit comments

Comments
 (0)