Subversion Repositories Scribus

Compare Revisions

Ignore whitespace Rev 19686 → Rev 19687

/branches/Version14x/Scribus/scribus/plugins/barcodegenerator/barcode.cpp
38,9 → 38,9
about->authors = QString::fromUtf8("Terry Burton - <tez@terryburton.co.uk>, Petr Van\xc4\x9bk <petr@scribus.info>");
about->shortDescription = tr("Scribus frontend for Pure PostScript Barcode Writer");
about->description = "Barcode Writer in Pure PostScript is an award-winning open source barcode maker, as used by NASA, that facilitates the printing of all major barcode symbologies entirely within level 2 PostScript, ideal for variable data printing. The complete process of generating printed barcodes is performed entirely within the printer (or print system) so that it is no longer the responsibility of your application or a library. There is no need for any barcode fonts and the flexibility offered by direct PostScript means you can avoid re-implementing barcode generator code, or migrating to new libraries, whenever your project language needs change.\nhttp://www.terryburton.co.uk/barcodewriter/";
about->version = "Backend: 2013-02-27";
about->version = "Backend: 2014-12-11";
// about->releaseDate
about->copyright = QString::fromUtf8("Backend: Copyright (c) 2004-2013 Terry Burton - tez@terryburton.co.uk\nFrontend: Copyright (c) 2005 Petr Van\xc4\x9bk - petr@scribus.info");
about->copyright = QString::fromUtf8("Backend: Copyright (c) 2004-2014 Terry Burton - tez@terryburton.co.uk\nFrontend: Copyright (c) 2005 Petr Van\xc4\x9bk - petr@scribus.info");
about->license = "Backend: MIT/X-Consortium, Frontend: GPL";
return about;
}
/branches/Version14x/Scribus/scribus/plugins/barcodegenerator/barcode.ps
1,15 → 1,10
%!PS-Adobe-2.0
%%Creator: Terry Burton
%%DocumentPaperSizes: a4
%%EndComments
%!PS
 
% Barcode Writer in Pure PostScript - Version 2013-02-27
% http://www.terryburton.co.uk/barcodewriter/
% Barcode Writer in Pure PostScript - Version 2014-12-11
% http://bwipp.terryburton.co.uk
%
% Copyright (c) 2004-2013 Terry Burton
% Copyright (c) 2004-2014 Terry Burton
%
% $Id$
%
% Permission is hereby granted, free of charge, to any
% person obtaining a copy of this software and associated
% documentation files (the "Software"), to deal in the
34,28 → 29,49
% CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
% IN THE SOFTWARE.
 
% Uncomment this next line to allow these named resource
% definitions to remain resident within a printer's
% PostScript virtual machine so that the barcode generation
% capability persists between jobs.
 
% serverdict begin 0 exitserver
 
% --BEGIN TEMPLATE--
 
% --BEGIN PREAMBLE--
% --BEGIN RESOURCE preamble--
%%BeginResource: Category uk.co.terryburton.bwipp 0.0 2014121100 35431 31768
%%BeginData: 6 ASCII Lines
currentglobal
true setglobal
/Generic /Category findresource
dup length 1 add dict copy
dup /InstanceType /packedarraytype put
/Generic /Category findresource dup length 1 add dict copy dup
/InstanceType /setpacking where {pop /packedarraytype} {/arraytype} ifelse put
/uk.co.terryburton.bwipp exch /Category defineresource pop
setglobal
% --END PREAMBLE--
%%EndData
%%EndResource
% --END RESOURCE preamble--
 
% --BEGIN RESOURCE raiseerror--
% --REQUIRES preamble--
%%BeginResource: uk.co.terryburton.bwipp raiseerror 0.0 2014121100 112145 43907
%%BeginData: 13 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
begin
/raiseerror {
$error exch /errorinfo exch put
$error exch /errorname exch put
$error /command null put
$error /newerror true put
handleerror quit
} bind def
/raiseerror dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END RESOURCE raiseerror--
 
% --BEGIN RENDERER renlinear--
% --REQUIRES preamble raiseerror--
%%BeginResource: uk.co.terryburton.bwipp renlinear 0.0 2014121100 80415 79633
%%BeginData: 237 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
begin
/renlinear {
 
290,11 → 306,17
/renlinear dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END RENDERER renlinear--
 
% --BEGIN RENDERER renmatrix--
% --REQUIRES preamble raiseerror--
%%BeginResource: uk.co.terryburton.bwipp renmatrix 0.0 2014121100 54629 54335
%%BeginData: 66 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
begin
/renmatrix {
 
335,21 → 357,21
0 0 moveto pixx 0 lineto pixx pixy lineto 0 pixy lineto closepath
backgroundcolor (unset) ne { gsave backgroundcolor setanycolor fill grestore } if
barcolor (unset) ne { barcolor setanycolor } if
/i 0 def
pixs {
/x i pixx mod def
/y pixy 1 sub i pixx idiv sub def
1 eq {
newpath
x y moveto
1 0 rlineto
0 1 rlineto
-1 0 rlineto
0 -1 rlineto
closepath fill
} if
/i i 1 add def
} forall
/xyget {pixx mul add get} bind def
newpath
0 1 pixs length 1 sub {
dup pixx mod /x exch def
pixx idiv /y exch def
pixs x y xyget 1 eq {
x pixy y sub 1 sub moveto
0 1 rlineto
1 0 rlineto
0 -1 rlineto
-1 0 rlineto
closepath
} if
} for
fill
grestore
 
end
358,11 → 380,17
/renmatrix dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END RENDERER renmatrix--
 
% --BEGIN RENDERER renmaximatrix--
% --REQUIRES preamble raiseerror--
%%BeginResource: uk.co.terryburton.bwipp renmaximatrix 0.0 2014121100 55829 55803
%%BeginData: 79 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
begin
/renmaximatrix {
 
370,17 → 398,41
 
/args exch def % We are given some arguments
 
% Default options
/barcolor (unset) def
/backgroundcolor (unset) def
 
% Apply the renderer options and the user options
args {def} forall
opt {def} forall
 
/barcolor barcolor cvlit def
/backgroundcolor backgroundcolor cvlit def
 
% Set RGB or CMYK color depending on length of given hex string
/setanycolor {
/anycolor exch def
anycolor length 6 eq {
(< >) 8 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setrgbcolor
} if
anycolor length 8 eq {
(< >) 10 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setcmykcolor
} if
} bind def
 
gsave
 
currentpoint translate
 
2.4945 dup scale % from 1pt to 1.88mm
 
0 0 moveto 30 0 lineto 30 29 lineto 0 29 lineto closepath
backgroundcolor (unset) ne { gsave backgroundcolor setanycolor fill grestore } if
barcolor (unset) ne { barcolor setanycolor } if
 
0.5 0.5774 translate
 
newpath
pixs {
dup
/x exch 30 mod def
395,8 → 447,9
0.5 0.2887 rlineto
0 0.5774 rlineto
-0.5 0.2887 rlineto
closepath fill
closepath
} forall
fill
 
% Plot the locator symbol
newpath 14 13.8576 0.5774 0 360 arc closepath
414,15 → 467,21
/renmaximatrix dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END RENDERER renmaximatrix--
 
% --BEGIN ENCODER ean5--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: EAN-5 (5 digit addon)
% --EXAM: 90200
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp ean5 0.0 2014121100 64068 63875
%%BeginData: 135 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/ean5 {
460,7 → 519,17
} {
/textyoffset textyoffset cvr def
} ifelse
 
% Validate input
barcode length 5 ne {
/bwipp.ean5badLength (EAN-5 add-on must be 5 digits) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.ean5badCharacter (EAN-5 add-on must contain only digits) //raiseerror exec
} if
} forall
% Create an array containing the character mappings
/encs
[ (3211) (2221) (2122) (1411) (1132)
545,15 → 614,21
/ean5 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ean5--
 
% --BEGIN ENCODER ean2--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: EAN-2 (2 digit addon)
% --EXAM: 05
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp ean2 0.0 2014121100 62753 62505
%%BeginData: 120 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/ean2 {
591,6 → 666,16
} {
/textyoffset textyoffset cvr def
} ifelse
 
% Validate input
barcode length 2 ne {
/bwipp.ean2badLength (EAN-2 add-on must be 2 digits) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.ean2badCharacter (EAN-2 add-on must contain only digits) //raiseerror exec
} if
} forall
% Create an array containing the character mappings
/encs
661,16 → 746,21
/ean2 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ean2--
 
% --BEGIN ENCODER ean13--
% --SUGGESTS ean5 ean2--
% --REQUIRES preamble raiseerror renlinear ean5 ean2--
% --DESC: EAN-13
% --EXAM: 2071473968010
% --EXAM: 2112345678900
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp ean13 0.0 2014121100 87471 83758
%%BeginData: 215 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /ean2 dup /uk.co.terryburton.bwipp findresource put
dup /ean5 dup /uk.co.terryburton.bwipp findresource put
726,7 → 816,20
pop
/addon () def
} ifelse
 
% Validate the input
barcode length 12 ne barcode length 13 ne and {
/bwipp.ean13badLength (EAN-13 must be 12 or 13 digits) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.ean13badCharacter (EAN-13 must contain only digits) //raiseerror exec
} if
} forall
addon length 0 ne addon length 2 ne and addon length 5 ne and {
/bwipp.ean13badAddOnLength (Add-on for EAN-13 must be 2 or 5 digits) //raiseerror exec
} if
 
% Add checksum digit
/pad 13 string def
/checksum 0 def
740,6 → 843,11
} ifelse
} for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 13 eq {
barcode 12 get checksum 48 add ne {
/bwipp.ean13badCheckDigit (Incorrect EAN-13 check digit provided) //raiseerror exec
} if
} if
pad 0 barcode putinterval % Add barcode to the start of the pad
pad 12 checksum 48 add put % Put ascii for checksum at end of pad
/barcode pad def
865,16 → 973,21
/ean13 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ean13--
 
% --BEGIN ENCODER ean8--
% --SUGGESTS ean5 ean2--
% --REQUIRES preamble raiseerror renlinear ean5 ean2--
% --DESC: EAN-8
% --EXAM: 01335583
% --EXOP: includetext guardwhitespace height=0.5
% --EXAM: 02345673
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp ean8 0.0 2014121100 84693 80881
%%BeginData: 196 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /ean2 dup /uk.co.terryburton.bwipp findresource put
dup /ean5 dup /uk.co.terryburton.bwipp findresource put
931,6 → 1044,19
/addon () def
} ifelse
 
% Validate the input
barcode length 7 ne barcode length 8 ne and {
/bwipp.ean8badLength (EAN-8 must be 7 or 8 digits) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.ean8badCharacter (EAN-8 must contain only digits) //raiseerror exec
} if
} forall
addon length 0 ne addon length 2 ne and addon length 5 ne and {
/bwipp.ean8badAddOnLength (Add-on for EAN-8 must be 2 or 5 digits) //raiseerror exec
} if
 
% Add checksum digit
/pad 8 string def
/checksum 0 def
944,6 → 1070,11
} ifelse
} for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 8 eq {
barcode 7 get checksum 48 add ne {
/bwipp.ean8badCheckDigit (Incorrect EAN-8 check digit provided) //raiseerror exec
} if
} if
pad 0 barcode putinterval % Add barcode to the start of the pad
pad 7 checksum 48 add put % Put ascii for checksum at end of pad
/barcode pad def
1050,16 → 1181,21
/ean8 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ean8--
 
% --BEGIN ENCODER upca--
% --SUGGESTS ean5 ean2--
% --REQUIRES preamble raiseerror renlinear ean5 ean2--
% --DESC: UPC-A
% --EXAM: 488581014973
% --EXAM: 416000336108
% --EXOP: includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp upca 0.0 2014121100 92328 88533
%%BeginData: 248 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /ean2 dup /uk.co.terryburton.bwipp findresource put
dup /ean5 dup /uk.co.terryburton.bwipp findresource put
1115,6 → 1251,64
pop
/addon () def
} ifelse
 
% Expand a given UPC-E
barcode length 7 eq barcode length 8 eq or {
% Validate the input
barcode {
dup 48 lt exch 57 gt or {
/bwipp.upcAupcEbadCharacter (UPC-E must contain only digits) //raiseerror exec
} if
} forall
barcode 0 get dup 48 ne exch 49 ne and {
/bwipp.upcAupcEbadNumberSystem (UPC-E must have number system 0 or 1) //raiseerror exec
} if
1 { % Common exit
/upcacode barcode length 8 eq {12} {11} ifelse string def
barcode 6 get 48 sub 2 le {
upcacode 0 barcode 0 3 getinterval putinterval
upcacode 3 barcode 6 1 getinterval putinterval
upcacode 4 (0000) putinterval
upcacode 8 barcode 3 3 getinterval putinterval
exit
} if
barcode 6 get 48 sub 3 eq {
upcacode 0 barcode 0 4 getinterval putinterval
upcacode 4 (00000) putinterval
upcacode 9 barcode 4 2 getinterval putinterval
exit
} if
barcode 6 get 48 sub 4 eq {
upcacode 0 barcode 0 5 getinterval putinterval
upcacode 5 (00000) putinterval
upcacode 10 barcode 5 1 getinterval putinterval
exit
} if
barcode 6 get 48 sub 5 ge {
upcacode 0 barcode 0 6 getinterval putinterval
upcacode 6 (0000) putinterval
upcacode 10 barcode 6 1 getinterval putinterval
exit
} if
} repeat
barcode length 8 eq {
upcacode 11 barcode 7 1 getinterval putinterval
} if
/barcode upcacode def
} if
 
% Validate the input
barcode length 11 ne barcode length 12 ne and {
/bwipp.upcAbadLength (UPC-A must be 11 or 12 digits) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.upcAbadCharacter (UPC-A must contain only digits) //raiseerror exec
} if
} forall
addon length 0 ne addon length 2 ne and addon length 5 ne and {
/bwipp.upcAbadAddOnLength (Add-on for UPC-A must be 2 or 5 digits) //raiseerror exec
} if
% Add checksum digit to barcode
/pad 12 string def % Create pad one bigger than barcode
1129,6 → 1323,11
} ifelse
} for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 12 eq {
barcode 11 get checksum 48 add ne {
/bwipp.upcAbadCheckDigit (Incorrect UPC check digit provided) //raiseerror exec
} if
} if
pad 0 barcode putinterval % Add barcode to the start of the pad
pad 11 checksum 48 add put % Put ascii for checksum at end of pad
/barcode pad def
1242,16 → 1441,21
/upca dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER upca--
 
% --BEGIN ENCODER upce--
% --SUGGESTS ean5 ean2--
% --REQUIRES preamble raiseerror renlinear ean5 ean2--
% --DESC: UPC-E
% --EXAM: 00123457
% --EXOP: includetext height=0.4
% --EXOP: includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp upce 0.0 2014121100 97037 93389
%%BeginData: 287 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /ean2 dup /uk.co.terryburton.bwipp findresource put
dup /ean5 dup /uk.co.terryburton.bwipp findresource put
1298,11 → 1502,6
addontextxoffset (unset) ne {/addontextxoffset addontextxoffset cvr def} if
addontextyoffset (unset) ne {/addontextyoffset addontextyoffset cvr def} if
 
% Ensure 0 or 1 number systems
barcode 0 get dup 48 ne exch 49 ne and {
/barcode () def
} if
 
% Split off the addon
barcode ( ) search {
/barcode exch def
1313,6 → 1512,65
/addon () def
} ifelse
 
% Compress a given UPC-A
barcode length 11 eq barcode length 12 eq or {
% Validate the input
barcode {
dup 48 lt exch 57 gt or {
/bwipp.upcEupcAbadCharacter (UPC-A must contain only digits) //raiseerror exec
} if
} forall
1 { % Common exit
/upcecode barcode length 12 eq {8} {7} ifelse string def
barcode 3 get 48 sub 2 le barcode 4 4 getinterval (0000) eq and {
upcecode 0 barcode 0 3 getinterval putinterval
upcecode 3 barcode 8 3 getinterval putinterval
upcecode 6 barcode 3 1 getinterval putinterval
exit
} if
barcode 4 5 getinterval (00000) eq {
upcecode 0 barcode 0 4 getinterval putinterval
upcecode 4 barcode 9 2 getinterval putinterval
upcecode 6 (3) putinterval
exit
} if
barcode 5 5 getinterval (00000) eq {
upcecode 0 barcode 0 5 getinterval putinterval
upcecode 5 barcode 10 1 getinterval putinterval
upcecode 6 (4) putinterval
exit
} if
barcode 10 get 48 sub 5 ge barcode 6 4 getinterval (0000) eq and {
upcecode 0 barcode 0 6 getinterval putinterval
upcecode 6 barcode 10 1 getinterval putinterval
exit
} if
/bwipp.upcEupcAnotCompressible (UPC-A cannot be converted to a UPC-E) //raiseerror exec
} repeat
barcode length 12 eq {
upcecode 7 barcode 11 1 getinterval putinterval
} if
/barcode upcecode def
} if
 
% Validate the input
barcode length 7 ne barcode length 8 ne and {
/bwipp.upcEbadLength (UPC-E must be 7 or 8 digits) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.upcEbadCharacter (UPC-E must contain only digits) //raiseerror exec
} if
} forall
addon length 0 ne addon length 2 ne and addon length 5 ne and {
/bwipp.upcEbadAddOnLength (Add-on for UPC-E must be 2 or 5 digits) //raiseerror exec
} if
 
% Ensure 0 or 1 number systems
barcode 0 get dup 48 ne exch 49 ne and {
/bwipp.upcEbadNumberSystem (UPC-E must have number system 0 or 1) //raiseerror exec
} if
 
% Create an array containing the character mappings
/encs
[ (3211) (2221) (2122) (1411) (1132)
1329,25 → 1587,34
] def
 
% Derive the equivalent UPC-A for its checksum
/upcacode (00000000000) 11 string copy def
upcacode 0 barcode 0 get put
barcode 6 get 48 sub 2 le {
upcacode 1 barcode 1 2 getinterval putinterval
upcacode 3 barcode 6 1 getinterval putinterval
upcacode 8 barcode 3 3 getinterval putinterval
} if
barcode 6 get 48 sub 3 eq {
upcacode 1 barcode 1 3 getinterval putinterval
upcacode 9 barcode 4 2 getinterval putinterval
} if
barcode 6 get 48 sub 4 eq {
upcacode 1 barcode 1 4 getinterval putinterval
upcacode 10 barcode 5 1 getinterval putinterval
} if
barcode 6 get 48 sub 5 ge {
upcacode 1 barcode 1 5 getinterval putinterval
upcacode 10 barcode 6 1 getinterval putinterval
} if
1 { % Common exit
/upcacode 11 string def
barcode 6 get 48 sub 2 le {
upcacode 0 barcode 0 3 getinterval putinterval
upcacode 3 barcode 6 1 getinterval putinterval
upcacode 4 (0000) putinterval
upcacode 8 barcode 3 3 getinterval putinterval
exit
} if
barcode 6 get 48 sub 3 eq {
upcacode 0 barcode 0 4 getinterval putinterval
upcacode 4 (00000) putinterval
upcacode 9 barcode 4 2 getinterval putinterval
exit
} if
barcode 6 get 48 sub 4 eq {
upcacode 0 barcode 0 5 getinterval putinterval
upcacode 5 (00000) putinterval
upcacode 10 barcode 5 1 getinterval putinterval
exit
} if
barcode 6 get 48 sub 5 ge {
upcacode 0 barcode 0 6 getinterval putinterval
upcacode 6 (0000) putinterval
upcacode 10 barcode 6 1 getinterval putinterval
exit
} if
} repeat
/checksum 0 def
0 1 10 {
/i exch def
1359,6 → 1626,11
} ifelse
} for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 8 eq {
barcode 7 get checksum 48 add ne {
/bwipp.upcEbadCheckDigit (Incorrect UPC check digit provided) //raiseerror exec
} if
} if
/pad 8 string def
pad 0 barcode putinterval % Add barcode to the start of the pad
pad 7 checksum 48 add put % Put ascii for checksum at end of pad
1468,17 → 1740,21
/upce dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER upce--
 
% --BEGIN ENCODER isbn--
% --REQUIRES ean13--
% --SUGGESTS ean5 ean2--
% --REQUIRES preamble raiseerror renlinear ean5 ean2 ean13--
% --DESC: ISBN
% --EXAM: 978-1-56592-479 54495
% --EXAM: 978-1-56581-231-4 52250
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp isbn 0.0 2014121100 92829 99144
%%BeginData: 252 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /ean13 dup /uk.co.terryburton.bwipp findresource put
begin
1487,7 → 1763,7
20 dict begin
 
/options exch def % We are given an options string
/isbntxt exch def % We are given the isbn text with dashes
/barcode exch def % We are given the isbn text with dashes
 
/dontdraw false def
/includetext false def % Enable/disable ISBN text
1518,8 → 1794,8
/addongap addongap cvr def
 
% Split off the addon
isbntxt ( ) search {
/isbntxt exch def
barcode ( ) search {
/barcode exch def
pop
/addon exch def
} {
1526,60 → 1802,153
pop
/addon () def
} ifelse
% Convert ISBN-10 to ISBN-13
legacy not isbntxt length 13 le and {
/pad isbntxt length 4 add string def
pad 0 (978-) putinterval
pad 4 isbntxt putinterval
/isbntxt pad def
 
% Validate the input
barcode length 15 ne barcode length 17 ne and
barcode length 11 ne barcode length 13 ne and and {
/bwipp.isbnBadLength (ISBN-13 must be 15 or 17 characters including dashes. ISBN-10 must be 11 or 13 characters including dashes) //raiseerror exec
} if
addon length 0 ne addon length 2 ne and addon length 5 ne and {
/bwipp.isbnBadAddOnLength (Add-on for ISBN must be 2 or 5 digits) //raiseerror exec
} if
barcode length 15 ge { % ISBN-13
barcode 0 4 getinterval dup (978-) ne exch (979-) ne and {
/bwipp.isbn13badPrefix (ISBN-13 prefix must be 978- or 979-) //raiseerror exec
} if
/wasdash false def /numdash 0 def /numdigit 0 def
barcode 5 9 getinterval {
dup
45 eq {
wasdash {
/bwipp.isbn13adjacentDashes (ISBN-13 does not permit adjacent dashes) //raiseerror exec
} if
/wasdash true def
/numdash numdash 1 add def
} if
dup 48 ge exch 57 le and {
/wasdash false def
/numdigit numdigit 1 add def
} if
} forall
numdash 2 ne numdigit 7 ne or {
/bwipp.isbn13numDashesDigits (Incorrect number of dashes and digits for ISBN-13) //raiseerror exec
} if
barcode 14 get dup 48 lt exch 57 gt or {
/bwipp.isbn13character15 (ISBN-13 character 15 must be a digit) //raiseerror exec
} if
barcode length 17 eq {
barcode 15 1 getinterval (-) ne {
/bwipp.isbn13character16 (ISBN-13 penultimate character must be a dash) //raiseerror exec
} if
barcode 16 get dup 48 lt exch 57 gt or {
/bwipp.isbn13character17 (ISBN-13 final character must be a digit) //raiseerror exec
} if
} if
} { % ISBN-10
barcode 0 get dup 48 lt exch 57 gt or {
/bwipp.isbn10FirstDigit (ISBN-10 first character must be a digit) //raiseerror exec
} if
/wasdash false def /numdash 0 def /numdigit 0 def
barcode 1 9 getinterval {
dup
45 eq {
wasdash {
/bwipp.isbn10adjacentDashes (ISBN-10 does not permit adjacent dashes) //raiseerror exec
} if
/wasdash true def
/numdash numdash 1 add def
} if
dup 48 ge exch 57 le and {
/wasdash false def
/numdigit numdigit 1 add def
} if
} forall
numdash 2 ne numdigit 7 ne or {
/bwipp.isbn10numDashesDigits (Incorrect number of dashes and digits for ISBN-10) //raiseerror exec
} if
barcode 10 get dup 48 lt exch 57 gt or {
/bwipp.isbn10character11 (ISBN-10 character 11 must be a digit) //raiseerror exec
} if
barcode length 13 eq {
barcode 11 1 getinterval (-) ne {
/bwipp.isbn10character12 (ISBN-10 penultimate character must be a dash) //raiseerror exec
} if
barcode 12 get dup dup 48 lt exch 57 gt or exch 88 ne and {
/bwipp.isbn10character13 (ISBN-10 final character must be a digit or X) //raiseerror exec
} if
} if
} ifelse
 
% Read the digits from isbntxt and calculate checksums
/isbn 13 string def
/checksum10 0 def
/checksum13 0 def
/i 0 def /n 0 def
{ % loop
/isbnchar isbntxt i get 48 sub def
isbnchar -3 ne { % Ignore dashes
isbn n isbnchar 48 add put
n 9 lt {
/checksum10 checksum10 10 n sub isbnchar mul add def
/isbntxt barcode def
 
% Read the digits from isbntxt and validate checksum for ISBN-10
isbntxt length 13 le {
/isbn 10 string def
/checksum 0 def
/i 0 def /n 0 def
{ % loop
/isbnchar isbntxt i get 48 sub def
isbnchar -3 ne { % Ignore dashes
isbn n isbnchar 48 add put
n 9 lt {
/checksum checksum 10 n sub isbnchar mul add def
} if
/n n 1 add def
} if
n 12 lt {
n 2 mod 0 eq {
/checksum13 isbnchar checksum13 add def
} {
/checksum13 isbnchar 3 mul checksum13 add def
} ifelse
/i i 1 add def
i isbntxt length eq {exit} if
} loop
/checksum 11 checksum 11 mod sub 11 mod dup 10 eq {pop 40} if 48 add def
/isbn isbn 0 9 getinterval def
isbntxt length 13 eq {
isbntxt 12 get checksum ne {
/bwipp.isbn10badCheckDigit (Incorrect ISBN-10 check digit provided) //raiseerror exec
} if
/n n 1 add def
} if
/i i 1 add def
i isbntxt length eq {exit} if
} loop
} if
 
legacy not isbntxt length 15 ge or {
 
% Convert ISBN-10 to ISBN-13
isbntxt length 13 le {
/pad 15 string def
pad 0 (978-) putinterval
pad 4 isbntxt 0 11 getinterval putinterval
/isbntxt pad def
} if
 
% Read the digits from isbntxt and validate checksum for ISBN-13
/isbn 13 string def
/checksum 0 def
/i 0 def /n 0 def
{ % loop
/isbnchar isbntxt i get 48 sub def
isbnchar -3 ne { % Ignore dashes
isbn n isbnchar 48 add put
n 12 lt {
/checksum isbnchar n 2 mod 0 ne {3 mul} if checksum add def
} if
/n n 1 add def
} if
/i i 1 add def
i isbntxt length eq {exit} if
} loop
/checksum 10 checksum 10 mod sub 10 mod 48 add def
/isbn isbn 0 12 getinterval def
isbntxt length 17 eq {
isbntxt 16 get checksum ne {
/bwipp.isbn13badCheckDigit (Incorrect ISBN-13 check digit provided) //raiseerror exec
} if
} if
 
} if
 
% Add the ISBN header to the isbntxt
n 9 eq n 10 eq or {
/checksum 11 checksum10 11 mod sub 11 mod def
/isbn isbn 0 9 getinterval def
/pad 18 string def
} {
/checksum 10 checksum13 10 mod sub 10 mod def
/isbn isbn 0 12 getinterval def
/pad 22 string def
} ifelse
/pad isbn length 12 eq {22} {18} ifelse string def
pad 0 (ISBN ) putinterval
pad 5 isbntxt putinterval % Add isbntxt to the pad
 
% Add checksum digit
pad pad length 2 sub 45 put % Put a dash
checksum 10 eq {
pad pad length 1 sub checksum 78 add put % Check digit for 10 is X
} {
pad pad length 1 sub checksum 48 add put % Put check digit
} ifelse
pad 5 isbntxt putinterval
pad pad length 2 sub 45 put
pad pad length 1 sub checksum put
/isbntxt pad def
 
% Convert ISBN digits to EAN-13
1635,17 → 2004,21
/isbn dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER isbn--
 
% --BEGIN ENCODER ismn--
% --REQUIRES ean13--
% --SUGGESTS ean5 ean2--
% --REQUIRES preamble raiseerror renlinear ean5 ean2 ean13--
% --DESC: ISMN
% --EXAM: 979-0-2600-0043
% --EXAM: 979-0-2605-3211-3
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp ismn 0.0 2014121100 89401 95601
%%BeginData: 231 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /ean13 dup /uk.co.terryburton.bwipp findresource put
begin
1654,7 → 2027,7
20 dict begin
 
/options exch def % We are given an options string
/ismntxt exch def % We are given the ismn text with dashes
/barcode exch def % We are given the ismn text with dashes
 
/dontdraw false def
/includetext false def % Enable/disable ISMN text
1685,8 → 2058,8
/addongap addongap cvr def
% Split off the addon
ismntxt ( ) search {
/ismntxt exch def
barcode ( ) search {
/barcode exch def
pop
/addon exch def
} {
1694,9 → 2067,90
/addon () def
} ifelse
 
% Validate the input
barcode length 15 ne barcode length 17 ne and
barcode length 11 ne barcode length 13 ne and and {
/bwipp.ismnBadLength (ISMN-13 must be 15 or 17 characters including dashes. ISMN-10 must be 11 or 13 characters including dashes) //raiseerror exec
} if
addon length 0 ne addon length 2 ne and addon length 5 ne and {
/bwipp.ismnBadAddOnLength (Add-on for ISMN must be 2 or 5 digits) //raiseerror exec
} if
barcode length 15 ge { % ISMN-13
barcode 0 4 getinterval (979-) ne {
/bwipp.ismn13badPrefix (ISMN-13 prefix must be 979-) //raiseerror exec
} if
/wasdash false def /numdash 0 def /numdigit 0 def
barcode 5 9 getinterval {
dup
45 eq {
wasdash {
/bwipp.ismn13adjacentDashes (ISMN-13 does not permit adjacent dashes) //raiseerror exec
} if
/wasdash true def
/numdash numdash 1 add def
} if
dup 48 ge exch 57 le and {
/wasdash false def
/numdigit numdigit 1 add def
} if
} forall
numdash 2 ne numdigit 7 ne or {
/bwipp.ismn13numDashesDigits (Incorrect number of dashes and digits for ISMN-13) //raiseerror exec
} if
barcode 14 get dup 48 lt exch 57 gt or {
/bwipp.ismn13character15 (ISMN-13 character 15 must be a digit) //raiseerror exec
} if
barcode length 17 eq {
barcode 15 1 getinterval (-) ne {
/bwipp.ismn13character16 (ISMN-13 penultimate character must be a dash) //raiseerror exec
} if
barcode 16 get dup 48 lt exch 57 gt or {
/bwipp.ismn13character17 (ISMN-13 final character must be a digit) //raiseerror exec
} if
} if
} { % ISMN-10
barcode 0 2 getinterval (M-) ne {
/bwipp.ismn10badPrefix (ISMN-10 prefix must be M-) //raiseerror exec
} if
barcode 2 get dup 48 lt exch 57 gt or {
/bwipp.ismn10character3 (ISMN-10 character 3 must be a digit) //raiseerror exec
} if
/wasdash false def /numdash 0 def /numdigit 0 def
barcode 3 7 getinterval {
dup
45 eq {
wasdash {
/bwipp.ismn10adjacentDashes (ISMN-10 does not permit adjacent dashes) //raiseerror exec
} if
/wasdash true def
/numdash numdash 1 add def
} if
dup 48 ge exch 57 le and {
/wasdash false def
/numdigit numdigit 1 add def
} if
} forall
numdash 1 ne numdigit 6 ne or {
/bwipp.ismn10numDashesDigits (Incorrect number of dashes and digits for ISMN-10) //raiseerror exec
} if
barcode 10 get dup 48 lt exch 57 gt or {
/bwipp.ismn10character11 (ISMN-10 character 11 must be a digit) //raiseerror exec
} if
barcode length 13 eq {
barcode 11 1 getinterval (-) ne {
/bwipp.ismn10character12 (ISMN-10 penultimate character must be a dash) //raiseerror exec
} if
barcode 12 get dup dup 48 lt exch 57 gt or exch 88 ne and {
/bwipp.ismn10character13 (ISMN-10 final character must be a digit or X) //raiseerror exec
} if
} if
} ifelse
 
/ismntxt barcode def
 
% Convert old ISMN to ISMN-13
/legacytxt () def
ismntxt 0 1 getinterval (M) eq ismntxt length 13 le and {
ismntxt length 13 le {
/legacytxt ismntxt def
/pad ismntxt length 4 add string def
pad 0 (979-0-) putinterval
1724,9 → 2178,16
/i i 1 add def
i ismntxt length eq {exit} if
} loop
/checksum 10 checksum 10 mod sub 10 mod def
/checksum 10 checksum 10 mod sub 10 mod 48 add def
 
% Add the ISMN header to the ismntxt
% Validate the checksum
barcode length 13 eq barcode length 17 eq or {
barcode dup length 1 sub get checksum ne {
/bwipp.ismnBadCheckDigit (Incorrect ISMN check digit provided) //raiseerror exec
} if
} if
 
% Add the ISMN header and checksum to the ismntxt
legacy legacytxt () ne and {
/ismntxt legacytxt def
/pad 18 string def
1734,11 → 2195,9
/pad 22 string def
} ifelse
pad 0 (ISMN ) putinterval
pad 5 ismntxt putinterval % Add ismntxt to the pad
 
% Add checksum digit
pad pad length 2 sub 45 put % Put a dash
pad pad length 1 sub checksum 48 add put % Put check digit
pad 5 ismntxt putinterval
pad pad length 2 sub 45 put
pad pad length 1 sub checksum put
/ismntxt pad def
 
% Convert ISMN digits to EAN-13
1788,17 → 2247,21
/ismn dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ismn--
 
% --BEGIN ENCODER issn--
% --REQUIRES ean13--
% --SUGGESTS ean2 ean5--
% --REQUIRES preamble raiseerror renlinear ean2 ean5 ean13--
% --DESC: ISSN
% --EXAM: 0317-8471 00 05
% --EXAM: 0311-175X 00 17
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp issn 0.0 2014121100 80698 83843
%%BeginData: 177 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /ean13 dup /uk.co.terryburton.bwipp findresource put
begin
1841,7 → 2304,10
/issntxt exch def
pop
/seqvar exch def
} if
} {
pop
/seqvar () def
} ifelse
 
% Split off the sequence variant and addon
seqvar ( ) search {
1850,9 → 2316,44
/addon exch def
} {
pop
/addon () def
/addon seqvar def
/seqvar (00) def
} ifelse
 
% Validate the input
issntxt length 8 ne issntxt length 9 ne and {
/bwipp.issnBadLength (ISSN must be 8 or 9 characters including dash) //raiseerror exec
} if
issntxt 0 4 getinterval {
dup 48 lt exch 57 gt or {
/bwipp.issnBadFormat (ISSN must have the format XXXX-XXXX) //raiseerror exec
} if
} forall
issntxt 4 1 getinterval (-) ne {
/bwipp.issnBadFormat (ISSN must have the format XXXX-XXXX) //raiseerror exec
} if
issntxt 5 3 getinterval {
dup 48 lt exch 57 gt or {
/bwipp.issnBadFormat (ISSN must have the format XXXX-XXXX) //raiseerror exec
} if
} forall
issntxt length 9 eq {
issntxt 8 get dup dup 48 lt exch 57 gt or exch 88 ne and { % Digits or X
/bwipp.issnBadFormat (ISSN must have the format XXXX-XXXX) //raiseerror exec
} if
} if
seqvar length 2 ne {
/bwipp.issnBadSequenceVariantLength (Sequence variant for ISSN must be 2 digits) //raiseerror exec
} if
seqvar {
dup 48 lt exch 57 gt or {
/bwipp.issnSequenceVariantBadCharacter (Sequence variant for ISSN must contain only digits) //raiseerror exec
} if
} forall
addon length 0 ne addon length 2 ne and addon length 5 ne and {
/bwipp.issnBadAddOnLength (Add-on for ISSN must be 2 or 5 digits) //raiseerror exec
} if
 
% Read the digits from issntxt and calculate checksums
/issn 8 string def
/checksum 0 def
1870,14 → 2371,18
i issntxt length eq {exit} if
} loop
/checksum 11 checksum 11 mod sub 11 mod def
/checksum checksum 48 add dup 58 eq {pop 88} if def
issntxt length 9 eq {
issntxt 8 get checksum ne {
/bwipp.issnBadCheckDigit (Incorrect ISSN check digit provided) //raiseerror exec
} if
} if
 
% Add the ISSN header to the issntxt
% Add the ISSN header and checksum to the issntxt
/pad 14 string def
pad 0 (ISSN ) putinterval
pad 5 issntxt putinterval % Add issntxt to the pad
 
% Add checksum digit
pad 13 checksum 48 add dup 58 eq {pop 88} if put % Put check digit
pad 13 checksum put
/issntxt pad def
 
% Convert ISSN digits to EAN-13
1931,15 → 2436,21
/issn dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER issn--
 
% --BEGIN ENCODER code128--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Code 128
% --EXAM: Count01234567^FNC2!
% --EXOP: includetext parsefnc
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp code128 0.0 2014121100 122003 121439
%%BeginData: 421 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/code128 {
2358,16 → 2869,21
/code128 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code128--
 
% --BEGIN ENCODER gs1-128--
% --REQUIRES code128--
% --REQUIRES preamble raiseerror renlinear code128--
% --DESC: GS1-128
% --EXAM: (01)95012345678903(3103)000123
% --EXOP: includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp gs1-128 0.0 2014121100 73938 76998
%%BeginData: 157 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code128 dup /uk.co.terryburton.bwipp findresource put
begin
2522,16 → 3038,21
/gs1-128 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER gs1-128--
 
% --BEGIN ENCODER ean14--
% --REQUIRES code128--
% --REQUIRES preamble raiseerror renlinear code128--
% --DESC: GS1-14
% --EXAM: (01)04601234567893
% --EXOP: includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp ean14 0.0 2014121100 63855 67029
%%BeginData: 93 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code128 dup /uk.co.terryburton.bwipp findresource put
begin
2567,22 → 3088,37
/textyoffset textyoffset cvr def
/height height cvr def
 
% Calculate EAN checksum and add to end of barcode
barcode length dup 17 eq exch 18 eq or
barcode 0 4 getinterval (\(01\)) eq and {
/checksum 0 def
0 1 12 {
/i exch def
/checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
18 string
dup 0 barcode 0 17 getinterval putinterval
dup 17 checksum 48 add put
/barcode exch def
/gtin barcode 4 14 getinterval def
% Validate the input
barcode 0 4 getinterval (\(01\)) ne {
/bwipp.ean14badAI (GS1-14 must begin with (01) application identifier) //raiseerror exec
} if
barcode length 17 ne barcode length 18 ne and {
/bwipp.ean14badLength (GS1-14 must be 13 or 14 digits) //raiseerror exec
} if
barcode 4 barcode length 4 sub getinterval {
dup 48 lt exch 57 gt or {
/bwipp.ean14badCharacter (GS1-14 must contain only digits) //raiseerror exec
} if
} forall
 
% Calculate checksum and add to end of barcode
/checksum 0 def
0 1 12 {
/i exch def
/checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 18 eq {
barcode 17 get checksum 48 add ne {
/bwipp.ean14badCheckDigit (Incorrect GS1-14 check digit provided) //raiseerror exec
} if
} if
18 string
dup 0 barcode putinterval
dup 17 checksum 48 add put
/barcode exch def
/gtin barcode 4 14 getinterval def
 
% Compose input to code128
/text barcode def
/barcode 21 string def
2607,16 → 3143,21
/ean14 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ean14--
 
% --BEGIN ENCODER sscc18--
% --REQUIRES code128--
% --REQUIRES preamble raiseerror renlinear code128--
% --DESC: SSCC-18
% --EXAM: (00)006141411234567890
% --EXOP: includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp sscc18 0.0 2014121100 63867 67036
%%BeginData: 93 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code128 dup /uk.co.terryburton.bwipp findresource put
begin
2652,22 → 3193,37
/textyoffset textyoffset cvr def
/height height cvr def
 
% Calculate EAN checksum and add to end of barcode
barcode length dup 21 eq exch 22 eq or
barcode 0 4 getinterval (\(00\)) eq and {
/checksum 0 def
0 1 16 {
/i exch def
/checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
22 string
dup 0 barcode 0 21 getinterval putinterval
dup 21 checksum 48 add put
/barcode exch def
/sscc barcode 4 18 getinterval def
% Validate the input
barcode 0 4 getinterval (\(00\)) ne {
/bwipp.sscc18badAI (SSCC-18 must begin with (00) application identifier) //raiseerror exec
} if
barcode length 21 ne barcode length 22 ne and {
/bwipp.sscc18badLength (SSCC-18 must be 17 or 18 digits) //raiseerror exec
} if
barcode 4 barcode length 4 sub getinterval {
dup 48 lt exch 57 gt or {
/bwipp.sscc18badCharacter (SSCC-18 must contain only digits) //raiseerror exec
} if
} forall
 
% Calculate checksum and add to end of barcode
/checksum 0 def
0 1 16 {
/i exch def
/checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 22 eq {
barcode 21 get checksum 48 add ne {
/bwipp.sscc18badCheckDigit (Incorrect SSCC-18 check digit provided) //raiseerror exec
} if
} if
22 string
dup 0 barcode putinterval
dup 21 checksum 48 add put
/barcode exch def
/sscc barcode 4 18 getinterval def
 
% Compose input to code128
/text barcode def
/barcode 25 string def
2692,15 → 3248,21
/sscc18 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER sscc18--
 
% --BEGIN ENCODER code39--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Code 39
% --EXAM: THIS IS CODE 39
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp code39 0.0 2014121100 69000 68552
%%BeginData: 141 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/code39 {
2711,7 → 3273,8
/barcode exch def % We are given a barcode string
 
/dontdraw false def
/includecheck false def % Enable/disable checkdigit
/includecheck false def
/validatecheck false def
/includetext false def
/includecheckintext false def
/hidestars false def
2735,7 → 3298,35
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
 
% Create a string of the available characters
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
 
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
/bwipp.code39badCharacter (Code 39 must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
} if
} for
 
/barlen barcode length validatecheck {1 sub} if def
 
/checksum 0 def
0 1 barlen 1 sub {
barcode exch 1 getinterval charvals exch get
checksum add /checksum exch def
} for
/checksum checksum 43 mod def
validatecheck {
barcode barlen get barchars checksum get ne {
/bwipp.code39badCheckDigit (Incorrect Code 39 check digit provided) //raiseerror exec
} if
/barcode barcode 0 barlen getinterval def
/includecheck true def
} if
 
% Create an array containing the character mappings
/encs
[ (1113313111) (3113111131) (1133111131) (3133111111) (1113311131)
2749,21 → 3340,9
(1313111311) (1311131311) (1113131311) (1311313111)
] def
 
% Create a string of the available characters
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*) def
/sbs barlen includecheck {3} {2} ifelse add 10 mul string def
/txt barlen includecheck {3} {2} ifelse add array def
 
/barlen barcode length def % Length of the code
 
includecheck {
/sbs barlen 10 mul 30 add string def
/txt barlen 3 add array def
} {
/sbs barlen 10 mul 20 add string def
/txt barlen 2 add array def
} ifelse
 
/checksum 0 def
 
% Put the start character
sbs 0 encs 43 get putinterval
hidestars not {
2774,20 → 3353,13
 
0 1 barlen 1 sub {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/enc encs indx get def % Get the indxth encoding
sbs i 10 mul 10 add enc putinterval % Put encoded digit into sbs
/indx charvals barcode i 1 getinterval get def
sbs i 10 mul 10 add encs indx get putinterval
txt i 1 add [barcode i 1 getinterval i 1 add 16 mul textyoffset textfont textsize] put
/checksum checksum indx add def
} for
 
% Put the checksum and end characters
includecheck {
/checksum checksum 43 mod def
sbs barlen 10 mul 10 add encs checksum get putinterval
includecheckintext {
txt barlen 1 add [barchars checksum 1 getinterval barlen 1 add 16 mul textyoffset textfont textsize] put
2829,16 → 3401,21
/code39 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code39--
 
% --BEGIN ENCODER code39ext--
% --REQUIRES code39--
% --REQUIRES preamble raiseerror renlinear code39--
% --DESC: Code 39 Extended
% --EXAM: Code39 Ext!
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp code39ext 0.0 2014121100 67871 70945
%%BeginData: 110 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code39 dup /uk.co.terryburton.bwipp findresource put
begin
2885,6 → 3462,13
} loop
} if
 
% Validate the input
barcode 4 barcode length 4 sub getinterval {
128 ge {
/bwipp.code39extBadCharacter (Code 39 Extended must contain only ASCII characters) //raiseerror exec
} if
} forall
 
/barlen barcode length def
 
% Extended alphabet to non-extended alphabet
2939,16 → 3523,21
/code39ext dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code39ext--
 
% --BEGIN ENCODER code32--
% --REQUIRES code39--
% --DESC: Italian PharmaCode
% --REQUIRES preamble raiseerror renlinear code39--
% --DESC: Italian Pharmacode
% --EXAM: 01234567
% --EXOP: includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp code32 0.0 2014121100 64608 67911
%%BeginData: 99 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code39 dup /uk.co.terryburton.bwipp findresource put
begin
2983,15 → 3572,33
/textyoffset textyoffset cvr def
/height height cvr def
 
/text 10 string def
text 0 barcode 0 8 getinterval putinterval
% Validate the input
barcode length 8 ne barcode length 9 ne and {
/bwipp.code32badLength (Italian Pharmacode must be 8 or 9 digits) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.code32badCharacter (Italian Pharmacode must contain only digits) //raiseerror exec
} if
} forall
 
% calculate check digit
text 8 0
% Calculate check digit
/checksum 0 def
0 1 7 {
dup text exch get 48 sub exch 1 and 1 add mul dup 9 gt {9 sub} if add
/i exch def
barcode i get 48 sub i 2 mod 0 ne {2 mul} if dup 9 gt {9 sub} if
checksum add /checksum exch def
} for
10 mod 48 add put
/checksum checksum 10 mod def
barcode length 9 eq {
barcode 8 get checksum 48 add ne {
/bwipp.code32badCheckDigit (Incorrect Italian Pharmacode check digit provided) //raiseerror exec
} if
} if
10 string
dup 0 barcode putinterval
dup 8 checksum 48 add put
/text exch def
 
% convert number from base10 to base32
/val text cvi 32 barcode cvrs def
3027,16 → 3634,21
/code32 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code32--
 
% --BEGIN ENCODER pzn--
% --REQUIRES code39--
% --REQUIRES preamble raiseerror renlinear code39--
% --DESC: Pharmazentralnummer (PZN)
% --EXAM: 123456
% --EXOP: includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp pzn 0.0 2014121100 64783 67907
%%BeginData: 100 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code39 dup /uk.co.terryburton.bwipp findresource put
begin
3073,17 → 3685,45
/textxoffset textxoffset cvr def
/height height cvr def
 
/msg pzn8 {9} {8} ifelse string def
/msglen msg length def
msg 0 45 put
msg 1 barcode 0 msglen 2 sub getinterval putinterval
% Validate the input
pzn8 {
barcode length 7 ne barcode length 8 ne and {
/bwipp.pzn8badLength (PZN8 must be 7 or 8 digits) //raiseerror exec
} if
} {
barcode length 6 ne barcode length 7 ne and {
/bwipp.pzn7badLength (PZN7 must be 6 or 7 digits) //raiseerror exec
} if
} ifelse
barcode {
dup 48 lt exch 57 gt or {
/bwipp.pznBadCharacter (PZN must contain only digits) //raiseerror exec
} if
} forall
 
% Calculate check digit
/msglen pzn8 {9} {8} ifelse def
/checksum 0 def
0 1 msglen 3 sub {
/i exch def
barcode i get 48 sub i pzn8 {1} {2} ifelse add mul
checksum add /checksum exch def
} for
/checksum checksum 11 mod def
checksum 10 eq {
/bwipp.pznBadInputSequence (Incorrect PZN input sequence provided) //raiseerror exec
} if
barcode length msglen 1 sub eq {
barcode msglen 2 sub get checksum 48 add ne {
/bwipp.pznBadCheckDigit (Incorrect PZN check digit provided) //raiseerror exec
} if
} if
msglen string
dup 0 45 put
dup 1 barcode putinterval
dup msglen 1 sub checksum 48 add put
/msg exch def
% calculate check digit
0
1 1 msglen 2 sub {dup msg exch get 48 sub exch pzn8 not {1 add} if mul add} for
11 mod 48 add
msg exch msglen 1 sub exch put
% Get the result of encoding with code39
options (dontdraw) true put
/args msg options //code39 exec def
3106,15 → 3746,21
/pzn dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER pzn--
 
% --BEGIN ENCODER code93--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Code 93
% --EXAM: THIS IS CODE 93
% --EXOP: includetext includecheck
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp code93 0.0 2014121100 67695 67503
%%BeginData: 148 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/code93 {
3260,16 → 3906,21
/code93 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code93--
 
% --BEGIN ENCODER code93ext--
% --REQUIRES code93--
% --REQUIRES preamble raiseerror renlinear code93--
% --DESC: Code 93 Extended
% --EXAM: Code93 Ext!
% --EXOP: includetext includecheck
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp code93ext 0.0 2014121100 68040 71146
%%BeginData: 114 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code93 dup /uk.co.terryburton.bwipp findresource put
begin
3381,15 → 4032,21
/code93ext dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code93ext--
 
% --BEGIN ENCODER interleaved2of5--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Interleaved 2 of 5 (ITF)
% --EXAM: 2401234567
% --EXOP: height=0.5 includecheck includetext includecheckintext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp interleaved2of5 0.0 2014121100 67459 67031
%%BeginData: 150 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/interleaved2of5 {
3423,6 → 4080,13
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
 
% Validate the input
barcode {
dup 48 lt exch 57 gt or {
/bwipp.interleaved2of5badCharacter (Interleaved 2 of 5 must contain only digits) //raiseerror exec
} if
} forall
/barlen barcode length def % Length of the code
 
3530,16 → 4194,21
/interleaved2of5 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER interleaved2of5--
 
% --BEGIN ENCODER itf14--
% --REQUIRES interleaved2of5--
% --REQUIRES preamble raiseerror renlinear interleaved2of5--
% --DESC: ITF-14
% --EXAM: 04601234567893
% --EXOP: includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp itf14 0.0 2014121100 63768 66890
%%BeginData: 95 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /interleaved2of5 dup /uk.co.terryburton.bwipp findresource put
begin
3551,12 → 4220,17
/barcode exch def % We are given a barcode string
 
/dontdraw false def
/includetext false def % Enable/disable text
/includetext false def
/includecheckintext true def
/textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset -7 def
/height 1 def
/textyoffset -10 def
/height 0.5 def
/showborder true def
/borderwidth 4 def
/borderleft 15 def
/borderright 15 def
% Parse the input options
options type /stringtype eq {
3574,23 → 4248,47
/textxoffset textxoffset cvr def
/textyoffset textyoffset cvr def
/height height cvr def
/borderwidth borderwidth cvr def
/borderleft borderleft cvr def
/borderright borderright cvr def
 
% Calculate EAN checksum and add to end of barcode
barcode length dup 13 eq exch 14 eq or {
/gtin barcode 0 13 getinterval def
% Validate the input
barcode length 13 ne barcode length 14 ne and {
/bwipp.itf14badLength (ITF-14 must be 13 or 14 digits) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.itf14badCharacter (ITF-14 must contain only digits) //raiseerror exec
} if
} forall
 
% Calculate ITF checksum and add to end of barcode
/checksum 0 def
0 1 12 {
/i exch def
/checksum checksum barcode i get 48 sub i 2 mod 0 eq {3 mul} if add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 14 eq {
barcode 13 get checksum 48 add ne {
/bwipp.itf14badCheckDigit (Incorrect ITF-14 check digit provided) //raiseerror exec
} if
} if
14 string
dup 0 barcode putinterval
dup 13 checksum 48 add put
/barcode exch def
 
% Get the result of encoding with interleaved2of5
options (dontdraw) true put
options (showborder) true put
options (borderwidth) 4 put
options (borderleft) 15 put
options (borderright) 15 put
options (height) 0.5 put
options (includecheck) true put
options (includecheckintext) true put
options (textyoffset) -10 put
/args gtin options //interleaved2of5 exec def
options (showborder) showborder put
options (borderwidth) borderwidth put
options (borderleft) borderleft put
options (borderright) borderright put
options (height) height put
options (textyoffset) textyoffset put
options (includecheckintext) includecheckintext put
/args barcode options //interleaved2of5 exec def
 
args (opt) options put
args
3603,16 → 4301,21
/itf14 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER itf14--
 
% --BEGIN ENCODER identcode--
% --REQUIRES interleaved2of5--
% --BEGIN ENCODER identcode--
% --REQUIRES preamble raiseerror renlinear interleaved2of5--
% --DESC: Deutsche Post Identcode
% --EXAM: 563102430313
% --EXOP: includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp identcode 0.0 2014121100 63813 66907
%%BeginData: 91 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /interleaved2of5 dup /uk.co.terryburton.bwipp findresource put
begin
3648,20 → 4351,32
/textyoffset textyoffset cvr def
/height height cvr def
 
% Validate the input
barcode length 11 ne barcode length 12 ne and {
/bwipp.identcodeBadLength (Deutsche Post Identcode must be 11 or 12 digits) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.identcodeBadCharacter (Deutsche Post Identcode must contain only digits) //raiseerror exec
} if
} forall
 
% Calculate checksum and add to end of barcode
barcode length dup 11 eq exch 12 eq or {
/checksum 0 def
0 1 10 {
/i exch def
/checksum checksum barcode i get 48 sub i 2 mod 0 eq {4 mul} {9 mul} ifelse add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
12 string
dup 0 barcode 0 11 getinterval putinterval
dup 11 checksum 48 add put
/pad exch def
/checksum 0 def
0 1 10 {
/i exch def
/checksum checksum barcode i get 48 sub i 2 mod 0 eq {4 mul} {9 mul} ifelse add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 12 eq {
barcode 11 get checksum 48 add ne {
/bwipp.identcodeBadCheckDigit (Incorrect Deutsche Post Identcode check digit provided) //raiseerror exec
} if
} if
/barcode pad def
12 string
dup 0 barcode putinterval
dup 11 checksum 48 add put
/barcode exch def
 
% Compose the human readable text
/text ( . . ) 16 string copy def
3689,16 → 4404,21
/identcode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER identcode--
 
% --BEGIN ENCODER leitcode--
% --REQUIRES interleaved2of5--
% --BEGIN ENCODER leitcode--
% --REQUIRES preamble raiseerror renlinear interleaved2of5--
% --DESC: Deutsche Post Leitcode
% --EXAM: 21348075016401
% --EXOP: includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp leitcode 0.0 2014121100 63805 66903
%%BeginData: 91 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /interleaved2of5 dup /uk.co.terryburton.bwipp findresource put
begin
3734,20 → 4454,32
/textyoffset textyoffset cvr def
/height height cvr def
 
% Validate the input
barcode length 13 ne barcode length 14 ne and {
/bwipp.leitcodeBadLength (Deutsche Post Leitcode must be 13 or 14 digits) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.leitcodeBadCharacter (Deutsche Post Leitcode must contain only digits) //raiseerror exec
} if
} forall
 
% Calculate checksum and add to end of barcode
barcode length dup 13 eq exch 14 eq or {
/checksum 0 def
0 1 12 {
/i exch def
/checksum checksum barcode i get 48 sub i 2 mod 0 eq {4 mul} {9 mul} ifelse add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
14 string
dup 0 barcode 0 13 getinterval putinterval
dup 13 checksum 48 add put
/pad exch def
/checksum 0 def
0 1 12 {
/i exch def
/checksum checksum barcode i get 48 sub i 2 mod 0 eq {4 mul} {9 mul} ifelse add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 14 eq {
barcode 13 get checksum 48 add ne {
/bwipp.leitcodeBadCheckDigit (Incorrect Deutsche Post Leitcode check digit provided) //raiseerror exec
} if
} if
/barcode pad def
14 string
dup 0 barcode putinterval
dup 13 checksum 48 add put
/barcode exch def
 
% Compose the human readable text
/text ( . . . ) 18 string copy def
3775,15 → 4507,21
/leitcode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER leitcode--
 
% --BEGIN ENCODER databaromni--
% --REQUIRES preamble raiseerror renlinear renmatrix--
% --DESC: GS1 DataBar Omnidirectional
% --EXAM: (01)24012345678905
% --EXOP:
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp databaromni 0.0 2014121100 113396 115580
%%BeginData: 418 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
3813,25 → 4551,33
format (truncated) eq {/height 13 72 div def} if
/height height cvr def
 
% Strip the AI and optional check digit
barcode length dup 17 eq exch 18 eq or {
barcode 0 4 getinterval (\(01\)) eq {
/binval [
linkage {1} {0} ifelse
barcode 4 13 getinterval {48 sub} forall
] def
% Validate the input
barcode 0 4 getinterval (\(01\)) ne {
/bwipp.databaromniBadAI (GS1 DataBar Omnidirectional must begin with (01) application identifier) //raiseerror exec
} if
barcode length 17 ne barcode length 18 ne and {
/bwipp.databaromniBadLength (GS1 DataBar Omnidirectional must be 13 or 14 digits) //raiseerror exec
} if
barcode 4 barcode length 4 sub getinterval {
dup 48 lt exch 57 gt or {
/bwipp.databaromniBadCharacter (GS1 DataBar Omnidirectional must contain only digits) //raiseerror exec
} if
} if
} forall
 
% Calculate EAN checksum and add to end of barcode
% Calculate checksum and add to end of barcode
/checksum 0 def
0 1 12 {
/i exch def
/checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
} for
} for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 18 eq {
barcode 17 get checksum 48 add ne {
/bwipp.databaromniBadCheckDigit (Incorrect GS1 DataBar Omnidirectional check digit provided) //raiseerror exec
} if
} if
18 string
dup 0 barcode 0 17 getinterval putinterval
dup 0 barcode putinterval
dup 17 checksum 48 add put
/barcode exch def
 
3896,7 → 4642,12
out el 1 sub nm put
out
} bind def
/binval [
linkage {1} {0} ifelse
barcode 4 13 getinterval {48 sub} forall
] def
0 1 12 {
/i exch def
binval i 1 add 2 copy get binval i get 4537077 mod 10 mul add put
4186,16 → 4937,21
/databaromni dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databaromni--
 
% --BEGIN ENCODER databarstacked--
% --REQUIRES databaromni--
% --REQUIRES preamble raiseerror renlinear renmatrix databaromni--
% --DESC: GS1 DataBar Stacked
% --EXAM: (01)24012345678905
% --EXOP:
% --RNDR: renmatrix renlinear
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp databarstacked 0.0 2014121100 68587 65080
%%BeginData: 73 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /databaromni dup /uk.co.terryburton.bwipp findresource put
begin
4219,6 → 4975,36
} if
options {def} forall
 
% Validate the input
barcode 0 4 getinterval (\(01\)) ne {
/bwipp.databarstackedBadAI (GS1 DataBar Stacked must begin with (01) application identifier) //raiseerror exec
} if
barcode length 17 ne barcode length 18 ne and {
/bwipp.databarstackedBadLength (GS1 DataBar Stacked must be 13 or 14 digits) //raiseerror exec
} if
barcode 4 barcode length 4 sub getinterval {
dup 48 lt exch 57 gt or {
/bwipp.databarstackedBadCharacter (GS1 DataBar Stacked must contain only digits) //raiseerror exec
} if
} forall
 
% Calculate checksum and add to end of barcode
/checksum 0 def
0 1 12 {
/i exch def
/checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 18 eq {
barcode 17 get checksum 48 add ne {
/bwipp.databarstackedBadCheckDigit (Incorrect GS1 DataBar Stacked check digit provided) //raiseerror exec
} if
} if
18 string
dup 0 barcode putinterval
dup 17 checksum 48 add put
/barcode exch def
 
% Get the result of encoding with databaromni with format=stacked
options (dontdraw) true put
options (format) (stacked) put
4236,16 → 5022,21
/databarstacked dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarstacked--
 
% --BEGIN ENCODER databarstackedomni--
% --REQUIRES databaromni--
% --REQUIRES preamble raiseerror renlinear renmatrix databaromni--
% --DESC: GS1 DataBar Stacked Omnidirectional
% --EXAM: (01)24012345678905
% --EXOP:
% --RNDR: renmatrix renlinear
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp databarstackedomni 0.0 2014121100 68687 65056
%%BeginData: 73 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /databaromni dup /uk.co.terryburton.bwipp findresource put
begin
4269,6 → 5060,36
} if
options {def} forall
 
% Validate the input
barcode 0 4 getinterval (\(01\)) ne {
/bwipp.databarstackedomniBadAI (GS1 DataBar Stacked Omnidirectional must begin with (01) application identifier) //raiseerror exec
} if
barcode length 17 ne barcode length 18 ne and {
/bwipp.databarstackedomniBadLength (GS1 DataBar Stacked Omnidirectional must be 13 or 14 digits) //raiseerror exec
} if
barcode 4 barcode length 4 sub getinterval {
dup 48 lt exch 57 gt or {
/bwipp.databarstackedomniBadCharacter (GS1 DataBar Stacked Omnidirectional must contain only digits) //raiseerror exec
} if
} forall
 
% Calculate checksum and add to end of barcode
/checksum 0 def
0 1 12 {
/i exch def
/checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 18 eq {
barcode 17 get checksum 48 add ne {
/bwipp.databarstackedomniBadCheckDigit (Incorrect GS1 DataBar Stacked Omnidirectional check digit provided) //raiseerror exec
} if
} if
18 string
dup 0 barcode putinterval
dup 17 checksum 48 add put
/barcode exch def
 
% Get the result of encoding with databaromni with format=stackedomni
options (dontdraw) true put
options (format) (stackedomni) put
4286,16 → 5107,21
/databarstackedomni dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarstackedomni--
 
% --BEGIN ENCODER databartruncated--
% --REQUIRES databaromni--
% --REQUIRES preamble raiseerror renlinear renmatrix databaromni--
% --DESC: GS1 DataBar Truncated
% --EXAM: (01)24012345678905
% --EXOP:
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp databartruncated 0.0 2014121100 68613 65096
%%BeginData: 73 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /databaromni dup /uk.co.terryburton.bwipp findresource put
begin
4319,6 → 5145,36
} if
options {def} forall
 
% Validate the input
barcode 0 4 getinterval (\(01\)) ne {
/bwipp.databartruncatedBadAI (GS1 DataBar Truncated must begin with (01) application identifier) //raiseerror exec
} if
barcode length 17 ne barcode length 18 ne and {
/bwipp.databartruncatedBadLength (GS1 DataBar Truncated must be 13 or 14 digits) //raiseerror exec
} if
barcode 4 barcode length 4 sub getinterval {
dup 48 lt exch 57 gt or {
/bwipp.databartruncatedBadCharacter (GS1 DataBar Truncated must contain only digits) //raiseerror exec
} if
} forall
 
% Calculate checksum and add to end of barcode
/checksum 0 def
0 1 12 {
/i exch def
/checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 18 eq {
barcode 17 get checksum 48 add ne {
/bwipp.databartruncatedBadCheckDigit (Incorrect GS1 DataBar Truncated check digit provided) //raiseerror exec
} if
} if
18 string
dup 0 barcode putinterval
dup 17 checksum 48 add put
/barcode exch def
 
% Get the result of encoding with databaromni with format=truncated
options (dontdraw) true put
options (format) (truncated) put
4336,15 → 5192,21
/databartruncated dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databartruncated--
 
% --BEGIN ENCODER databarlimited--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: GS1 DataBar Limited
% --EXAM: (01)15012345678907
% --EXOP:
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp databarlimited 0.0 2014121100 86959 85912
%%BeginData: 276 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/databarlimited {
4371,34 → 5233,51
/height height cvr def
 
% Strip the AI and optional check digit
barcode length dup 17 eq exch 18 eq or {
barcode 0 5 getinterval dup (\(01\)0) eq exch (\(01\)1) eq or {
/binval [
barcode 4 13 getinterval {48 sub} forall
] def
linkage {
/linkval [ 2 0 1 5 1 3 3 5 3 1 0 9 6 ] def
0 1 binval length 1 sub {
/i exch def
binval i binval i get linkval i get add put
} for
} if
% Validate the input
barcode 0 4 getinterval (\(01\)) ne {
/bwipp.databarlimitedBadAI (GS1 DataBar Limited must begin with (01) application identifier) //raiseerror exec
} if
barcode length 17 ne barcode length 18 ne and {
/bwipp.databarlimitedBadLength (GS1 DataBar Limited must be 13 or 14 digits) //raiseerror exec
} if
barcode 4 get dup 48 lt exch 49 gt or {
/bwipp.databarlimitedBadStartDigit (GS1 DataBar Limited must begin with 0 or 1) //raiseerror exec
} if
barcode 5 barcode length 5 sub getinterval {
dup 48 lt exch 57 gt or {
/bwipp.databarlimitedBadCharacter (GS1 DataBar Limited must contain only digits) //raiseerror exec
} if
} if
} forall
 
% Calculate EAN checksum and add to end of barcode
% Calculate checksum and add to end of barcode
/checksum 0 def
0 1 12 {
/i exch def
/checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
} for
} for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 18 eq {
barcode 17 get checksum 48 add ne {
/bwipp.databaromniBadCheckDigit (Incorrect GS1 DataBar Limited check digit provided) //raiseerror exec
} if
} if
18 string
dup 0 barcode 0 17 getinterval putinterval
dup 0 barcode putinterval
dup 17 checksum 48 add put
/barcode exch def
 
% Strip the AI and optional check digit
/binval [
barcode 4 13 getinterval {48 sub} forall
] def
linkage {
/linkval [ 2 0 1 5 1 3 3 5 3 1 0 9 6 ] def
0 1 binval length 1 sub {
/i exch def
binval i binval i get linkval i get add put
} for
} if
 
% Create the human readable text
/txt barcode length array def
0 1 barcode length 1 sub {
4601,15 → 5480,21
/databarlimited dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarlimited--
 
% --BEGIN ENCODER databarexpanded--
% --REQUIRES preamble raiseerror renlinear renmatrix--
% --DESC: GS1 DataBar Expanded
% --EXAM: (01)95012345678903(3103)000123
% --EXOP:
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp databarexpanded 0.0 2014121100 199499 218773
%%BeginData: 871 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
5478,16 → 6363,21
/databarexpanded dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarexpanded--
 
% --BEGIN ENCODER databarexpandedstacked--
% --REQUIRES databarexpanded--
% --REQUIRES preamble raiseerror renlinear renmatrix databarexpanded--
% --DESC: GS1 DataBar Expanded Stacked
% --EXAM: (01)95012345678903(3103)000123
% --EXOP: segments=4
% --RNDR: renmatrix renlinear
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp databarexpandedstacked 0.0 2014121100 67280 63708
%%BeginData: 43 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /databarexpanded dup /uk.co.terryburton.bwipp findresource put
begin
5528,15 → 6418,21
/databarexpandedstacked dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarexpandedstacked--
 
% --BEGIN ENCODER pharmacode--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Pharmaceutical Binary Code
% --EXAM: 117480
% --EXOP: showborder
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp pharmacode 0.0 2014121100 61048 60791
%%BeginData: 91 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/pharmacode {
5568,6 → 6464,19
/wwidth wwidth cvr def
/swidth swidth cvr def
 
% Validate the input
barcode length 1 lt barcode length 6 gt or {
/bwipp.pharmacodeBadLength (Pharmacode must be 1 to 6 digits) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.pharmacodeBadCharacter (Pharmacode must contain only digits) //raiseerror exec
} if
} forall
barcode cvi dup 3 lt exch 131070 gt or {
/bwipp.pharmacodeBadValue (Pharmacode value must be between 3 and 131070) //raiseerror exec
} if
 
% Create the human readable text
/txt barcode length array def
0 1 barcode length 1 sub {
5612,15 → 6521,21
/pharmacode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER pharmacode--
 
% --BEGIN ENCODER pharmacode2--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Two-track Pharmacode
% --EXAM: 117480
% --EXOP: includetext showborder
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp pharmacode2 0.0 2014121100 61823 61489
%%BeginData: 96 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/pharmacode2 {
5647,6 → 6562,19
 
/height height cvr def
 
% Validate the input
barcode length 1 lt barcode length 8 gt or {
/bwipp.pharmacode2BadLength (Two-track Pharmacode must be 1 to 6 digits) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.pharmacode2badCharacter (Two-track Pharmacode must contain only digits) //raiseerror exec
} if
} forall
barcode cvi dup 4 lt exch 64570080 gt or {
/bwipp.pharmacode2badValue (Two-track Pharmacode value must be between 4 and 64570080) //raiseerror exec
} if
 
% Create the human readable text
/txt barcode length array def
0 1 barcode length 1 sub {
5701,15 → 6629,21
/pharmacode2 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER pharmacode2--
 
% --BEGIN ENCODER code2of5--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Code 25
% --EXAM: 01234567
% --EXOP: version=iata includetext includecheck includecheckintext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp code2of5 0.0 2014121100 69481 69040
%%BeginData: 150 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/code2of5 {
5721,6 → 6655,7
 
/dontdraw false def
/includecheck false def
/validatecheck false def
/includetext false def % Enable/disable text
/includecheckintext false def
/textfont /Courier def
5745,8 → 6680,31
/textyoffset textyoffset cvr def
/height height cvr def
 
% Validate input
barcode {
dup 48 lt exch 57 gt or {
/bwipp.code2of5badCharacter (Code 25 must contain only digits) //raiseerror exec
} if
} forall
 
/barlen barcode length validatecheck {1 sub} if def
 
/checksum 0 def
0 1 barlen 1 sub {
/i exch def
/checksum checksum barcode i get 48 sub barlen i sub 2 mod 0 ne {3 mul} if add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
validatecheck {
barcode barlen get checksum 48 add ne {
/bwipp.code2of5badCheckDigit (Incorrect Code 25 check digit provided) //raiseerror exec
} if
/barcode barcode 0 barlen getinterval def
/includecheck true def
} if
 
% Create an array containing the character mappings
<<
/versions <<
/industrial
[ (1111313111) (3111111131) (1131111131) (3131111111)
(1111311131) (3111311111) (1131311111) (1111113131)
5769,8 → 6727,12
[ (113311) (311131) (131131) (331111) (113131) (313111)
(133111) (111331) (311311) (131311) (1111) (311)
]
>>
version get /encs exch def
>> def
versions version known not {
/bwipp.code2of5badVersion (Unrecognised Code 25 version) //raiseerror exec
} if
/encs versions version get def
 
/cs encs 0 get length def
/cw 0 encs 0 get {48 sub add} forall def
/ss encs dup length 2 sub get length def
5779,21 → 6741,11
% Create a string of the available characters
/barchars (0123456789) def
 
/barlen barcode length def % Length of the code
/sbs barlen includecheck {1 add} if cs mul ss add ss add string def
/txt barlen includecheck {1 add} if array def
 
includecheck {
/sbs barlen 1 add cs mul ss add ss add string def
/txt barlen 1 add array def
} {
/sbs barlen cs mul ss add ss add string def
/txt barlen array def
} ifelse
 
% Put the start character
sbs 0 encs 10 get putinterval
 
/checksum 0 def
 
0 1 barlen 1 sub {
/i exch def
% Lookup the encoding for the each barcode character
5804,16 → 6756,10
/enc encs indx get def % Get the indxth encoding
sbs i cs mul ss add enc putinterval % Put encoded digit into sbs
txt i [barcode i 1 getinterval i cw mul sw add textyoffset textfont textsize] put
barlen i sub 2 mod 0 eq {
/checksum checksum indx add def
} {
/checksum checksum indx 3 mul add def
} ifelse
} for
 
% Put the checksum and end characters
includecheck {
/checksum 10 checksum 10 mod sub 10 mod def
sbs barlen cs mul ss add encs checksum get putinterval
sbs barlen cs mul cs add ss add encs 11 get putinterval
includecheckintext {
5845,15 → 6791,21
/code2of5 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code2of5--
 
% --BEGIN ENCODER code11--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Code 11
% --EXAM: 0123456789
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp code11 0.0 2014121100 70977 70345
%%BeginData: 158 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/code11 {
5865,6 → 6817,7
 
/dontdraw false def
/includecheck false def
/validatecheck false def
/includetext false def
/includecheckintext false def
/textfont /Courier def
5897,50 → 6850,70
 
% Create a string of the available characters
/barchars (0123456789-) def
/charvals 11 dict def
0 1 10 {charvals exch dup barchars exch 1 getinterval exch put} for
 
/barlen barcode length def % Length of the code
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
/bwipp.code11badCharacter (Code 11 must contain only digits and dashes) //raiseerror exec
} if
} for
 
includecheck {
barlen 10 ge {
/sbs barlen 6 mul 24 add string def
/txt barlen 2 add array def
/barlen barcode length def
validatecheck {
barlen 11 eq {
/bwipp.code11badLength (Code 11 cannot be 11 characters using check digits) //raiseerror exec
} if
/barlen barlen barlen 10 le {1} {2} ifelse sub def
} if
 
/numchecks includecheck validatecheck or {barlen 10 ge {2} {1} ifelse} {0} ifelse def
/checksum1 0 def /checksum2 0 def
0 1 barlen 1 sub {
/i exch def
/indx charvals barcode i 1 getinterval get def
/checksum1 checksum1 barlen i sub 1 sub 10 mod 1 add indx mul add def
/checksum2 checksum2 barlen i sub 9 mod 1 add indx mul add def
} for
/checksum1 checksum1 11 mod def
/checksum2 checksum2 checksum1 add 11 mod def
validatecheck {
numchecks 1 eq {
barcode barlen get barchars checksum1 get ne {
/bwipp.code11badCheckDigit (Incorrect Code 11 check digit provided) //raiseerror exec
} if
} {
/sbs barlen 6 mul 18 add string def
/txt barlen 1 add array def
barcode barlen get barchars checksum1 get ne
barcode barlen 1 add get barchars checksum2 get ne or {
/bwipp.code11badCheckDigits (Incorrect Code 11 check digits provided) //raiseerror exec
} if
} ifelse
} {
/sbs barlen 6 mul 12 add string def
/txt barlen array def
} ifelse
/barcode barcode 0 barlen getinterval def
/includecheck true def
} if
 
/sbs barlen numchecks add 6 mul 12 add string def
/txt barlen numchecks add array def
 
% Put the start character
sbs 0 encs 11 get putinterval
 
/checksum1 0 def /checksum2 0 def
/xpos 8 def
0 1 barlen 1 sub {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/enc encs indx get def % Get the indxth encoding
sbs i 6 mul 6 add enc putinterval % Put encoded digit into sbs
/indx charvals barcode i 1 getinterval get def
/enc encs indx get def
sbs i 6 mul 6 add enc putinterval
txt i [barcode i 1 getinterval xpos textyoffset textfont textsize] put
0 1 5 { % xpos+=width of the character
/xpos exch enc exch get 48 sub xpos add def
} for
/checksum1 checksum1 barlen i sub 1 sub 10 mod 1 add indx mul add def
/checksum2 checksum2 barlen i sub 9 mod 1 add indx mul add def
} for
% Put the checksum and end characters
includecheck {
/checksum1 checksum1 11 mod def
barlen 10 ge {
/checksum2 checksum2 checksum1 add 11 mod def
sbs barlen 6 mul 6 add encs checksum1 get putinterval
sbs barlen 6 mul 12 add encs checksum2 get putinterval
includecheckintext {
5988,15 → 6961,21
/code11 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code11--
 
% --BEGIN ENCODER bc412--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: BC412
% --EXAM: BC412
% --EXOP: semi includetext includecheckintext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp bc412 0.0 2014121100 66446 66096
%%BeginData: 148 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/bc412 {
6007,7 → 6986,8
/barcode exch def % We are given a barcode string
 
/dontdraw false def
/includecheck false def % Enable/disable checkdigit
/includecheck false def
/validatecheck false def
/includetext false def
/includecheckintext false def
/includestartstop false def
6037,7 → 7017,35
/includecheck true def
/includestartstop true def
} if
 
% Create a string of the available characters
/barchars (0R9GLVHA8EZ4NTS1J2Q6C7DYKBUIX3FWP5M) def
/charvals 35 dict def
0 1 34 {charvals exch dup barchars exch 1 getinterval exch put} for
 
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
/bwipp.bc412badCharacter (BC412 must contain only digits and capital letters except O) //raiseerror exec
} if
} for
 
/barlen barcode length validatecheck {1 sub} if def
 
/checksum 0 def
0 1 barlen 1 sub {
barcode exch 1 getinterval charvals exch get
checksum add /checksum exch def
} for
/checksum checksum 35 mod def
validatecheck {
barcode barlen get barchars checksum get ne {
/bwipp.bc412badCheckDigit (Incorrect BC412 check digit provided) //raiseerror exec
} if
/barcode barcode 0 barlen getinterval def
/includecheck true def
} if
 
% Create an array containing the character mappings
/encs
[ (11111115) (13111212) (11131113) (12111213) (12121311)
6050,11 → 7058,6
(12) (111)
] def
 
% Create a string of the available characters
/barchars (0R9GLVHA8EZ4NTS1J2Q6C7DYKBUIX3FWP5M) def
 
/barlen barcode length def % Length of the code
 
/sbs barlen 1 add 8 mul 5 add string def
includecheck {
/txt barlen 1 add array def
6072,24 → 7075,16
/txtpos 0 def
} ifelse
 
/checksum 0 def
0 1 barlen 1 sub {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/enc encs indx get def % Get the indxth encoding
sbs pos enc putinterval % Put encoded digit into sbs
/indx charvals barcode i 1 getinterval get def
sbs pos encs indx get putinterval
txt i [barcode i 1 getinterval i 12 mul txtpos add textyoffset textfont textsize] put
/checksum checksum indx add def
/pos pos 8 add def
} for
 
% Put the checksum
includecheck {
/checksum checksum 35 mod def
sbs pos encs checksum get putinterval
includecheckintext {
txt barlen [barchars checksum 1 getinterval barlen 12 mul txtpos add textyoffset textfont textsize] put
6126,15 → 7121,21
/bc412 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER bc412--
 
% --BEGIN ENCODER rationalizedCodabar--
% --DESC: Rationalized Codabar
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Codabar
% --EXAM: A0123456789B
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp rationalizedCodabar 0.0 2014121100 71473 70757
%%BeginData: 156 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/rationalizedCodabar {
6145,7 → 7146,9
/barcode exch def % We are given a barcode string
 
/dontdraw false def
/altstartstop false def
/includecheck false def % Enable/disable checkdigit
/validatecheck false def
/includetext false def % Enable/disable text
/includecheckintext false def
/textfont /Courier def
6178,46 → 7181,72
] def
 
% Create a string of the available characters
/barchars (0123456789-$:/.+ABCD) def
 
/barlen barcode length def % Length of the code
 
includecheck {
/sbs barlen 8 mul 8 add string def
/txt barlen 1 add array def
altstartstop {
/barchars (0123456789-$:/.+TN*E) def
} {
/sbs barlen 8 mul string def
/txt barlen array def
/barchars (0123456789-$:/.+ABCD) def
} ifelse
/charvals 20 dict def
0 1 19 {charvals exch dup barchars exch 1 getinterval exch put} for
/bodyvals 16 dict def
0 1 15 {bodyvals exch dup barchars exch 1 getinterval exch put} for
/ssvals 4 dict def
16 1 19 {ssvals exch dup barchars exch 1 getinterval exch put} for
 
% Validate the input
barcode 0 1 getinterval ssvals exch known not
barcode barcode length 1 sub 1 getinterval ssvals exch known not or {
altstartstop {
/bwipp.rationalizedCodabarBadAltStartStop (Codabar start and stop characters must be one of E N T or *) //raiseerror exec
} {
/bwipp.rationalizedCodabarBadStartStop (Codabar start and stop characters must be one of A B C or D) //raiseerror exec
} ifelse
} if
1 1 barcode length 2 sub {
barcode exch 1 getinterval bodyvals exch known not {
/bwipp.rationalizedCodabarBadCharacter (Codabar body must contain only digits and symbols - $ : / . +) //raiseerror exec
} if
} for
 
/barlen barcode length validatecheck {1 sub} if def
 
/checksum 0 def
0 1 barlen 2 sub {
barcode exch 1 getinterval charvals exch get
checksum add /checksum exch def
} for
barcode barcode length 1 sub 1 getinterval charvals exch get
checksum add /checksum exch def
/checksum 16 checksum 16 mod sub 16 mod def
validatecheck {
barcode barlen 1 sub get barchars checksum get ne {
/bwipp.rationalizedCodabarBadCheckDigit (Incorrect Codabar check digit provided) //raiseerror exec
} if
barlen string
dup 0 barcode 0 barlen 1 sub getinterval putinterval
dup barlen 1 sub barcode barlen 1 getinterval putinterval
/barcode exch def
/includecheck true def
} if
 
/sbs barlen includecheck {1 add} if 8 mul string def
/txt barlen includecheck {1 add} if array def
 
/xpos 0 def
0 1 barlen 2 sub {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/enc encs indx get def % Get the indxth encoding
/indx charvals barcode i 1 getinterval get def
/enc encs indx get def
sbs i 8 mul enc putinterval % Put encoded digit into sbs
txt i [barcode i 1 getinterval xpos textyoffset textfont textsize] put
0 1 7 { % xpos+=width of the character
/xpos exch enc exch get 48 sub xpos add def
} for
/checksum checksum indx add def
} for
 
% Find index of last character
barcode barlen 1 sub 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
 
% Put the checksum character and stop character
includecheck {
% Put the checksum character
/checksum checksum indx add def
/checksum 16 checksum 16 mod sub 16 mod def
sbs barlen 8 mul 8 sub encs checksum get putinterval
includecheckintext {
txt barlen 1 sub [barchars checksum 1 getinterval xpos textyoffset textfont textsize] put
6228,11 → 7257,13
/xpos exch encs checksum get exch get 48 sub xpos add def
} for
% Put the end character
/indx charvals barcode barlen 1 sub 1 getinterval get def
/enc encs indx get def % Get the indxth encoding
sbs barlen 8 mul enc putinterval % Put encoded digit into sbs
txt barlen [barcode barlen 1 sub 1 getinterval xpos textyoffset textfont textsize] put
} {
% Put the end character
/indx charvals barcode barlen 1 sub 1 getinterval get def
/enc encs indx get def % Get the indxth encoding
sbs barlen 8 mul 8 sub enc putinterval % Put encoded digit into sbs
txt barlen 1 sub [barcode barlen 1 sub 1 getinterval xpos textyoffset textfont textsize] put
6258,15 → 7289,21
/rationalizedCodabar dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER rationalizedCodabar--
 
% --BEGIN ENCODER onecode--
% --DESC: United States Postal Service Intelligent Mail
% --REQUIRES preamble raiseerror renlinear--
% --DESC: USPS Intelligent Mail
% --EXAM: 0123456709498765432101234567891
% --EXOP: barcolor=FF0000
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp onecode 0.0 2014121100 105083 104845
%%BeginData: 335 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/onecode {
6599,15 → 7636,21
/onecode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER onecode--
 
% --BEGIN ENCODER postnet--
% --DESC: United States Postal Service POSTNET
% --REQUIRES preamble raiseerror renlinear--
% --DESC: USPS POSTNET
% --EXAM: 01234
% --EXOP: includetext includecheckintext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp postnet 0.0 2014121100 67140 66826
%%BeginData: 140 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/postnet {
6619,6 → 7662,7
 
/dontdraw false def
/includetext false def % Enable/disable text
/validatecheck false def
/includecheckintext false def
/textfont /Courier def
/textsize 10 def
6641,22 → 7685,33
/textyoffset textyoffset cvr def
/height height cvr def
/barlen barcode length def
/barlen barcode length validatecheck {1 sub} if def
 
% Ensure 5, 9 or 11 digits
barlen 5 lt {
/barlen -1 def % Error
} {
barlen 11 ge {
/barlen 11 def
% Validate the input
barlen 5 ne barlen 9 ne and barlen 11 ne and {
/bwipp.postnetBadLength (USPS POSTNET must be 5, 9 or 11 digits excluding check digit) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.postnetBadCharacter (USPS POSTNET must contain only digits) //raiseerror exec
} if
barlen 10 eq {
/barlen 9 def
} forall
 
% Create a string of the available characters
/barchars (0123456789) def
 
/checksum 0 def
0 1 barlen 1 sub {
/i exch def
/checksum checksum barcode i get 48 sub add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
validatecheck {
barcode barlen get barchars checksum get ne {
/bwipp.postnetBadCheckDigit (Incorrect USPS POSTNET check digit provided) //raiseerror exec
} if
barlen 8 le {
/barlen 5 def
} if
} ifelse
/barcode barcode 0 barlen getinterval def
} if
 
% Create an array containing the character mappings
/encs
6665,9 → 7720,6
(5) (5)
] def
 
% Create a string of the available characters
/barchars (0123456789) def
 
/bhs barlen 5 mul 7 add array def
/txt barlen 1 add array def
 
6680,15 → 7732,9
} for
bhs 0 heights putinterval % Put encoded digit into sbs
 
/checksum 0 def
0 1 barlen 1 sub {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/enc encs indx get def % Get the indxth encoding
/enc encs barcode i get 48 sub get def
/heights enc length array def
0 1 enc length 1 sub {
/j exch def
6696,11 → 7742,9
} for
bhs i 5 mul 1 add heights putinterval % Put encoded digit into sbs
txt i [barcode i 1 getinterval i 5 mul 1 add 3.312 mul textyoffset textfont textsize] put
/checksum checksum indx add def % checksum+=indx
} for
 
% Put the checksum character
/checksum 10 checksum 10 mod sub 10 mod def
/enc encs checksum get def
/heights enc length array def
0 1 enc length 1 sub {
6744,15 → 7788,21
/postnet dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER postnet--
 
% --BEGIN ENCODER planet--
% --DESC: United States Postal Service PLANET
% --REQUIRES preamble raiseerror renlinear--
% --DESC: USPS PLANET
% --EXAM: 01234567890
% --EXOP: includetext includecheckintext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp planet 0.0 2014121100 67000 66690
%%BeginData: 141 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/planet {
6764,6 → 7814,7
 
/dontdraw false def
/includetext false def % Enable/disable text
/validatecheck false def
/includecheckintext false def
/textfont /Courier def
/textsize 10 def
6785,20 → 7836,36
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
/barlen barcode length def
 
% Ensure 11 or 13 digits
barlen 11 lt {
/barlen -1 def % Error
} {
barlen 13 ge {
/barlen 13 def
} {
/barlen 11 def
} ifelse
} ifelse
/barlen barcode length validatecheck {1 sub} if def
 
% Validate the input
barlen 11 ne barlen 13 ne and {
/bwipp.planetBadLength (USPS PLANET must be 11 or 13 digits excluding check digit) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.planetBadCharacter (USPS PLANET must contain only digits) //raiseerror exec
} if
} forall
 
% Create a string of the available characters
/barchars (0123456789) def
 
% Calculate the checksum
/checksum 0 def
0 1 barlen 1 sub {
/i exch def
/checksum checksum barcode i get 48 sub add def
} for
/checksum 10 checksum 10 mod sub 10 mod def
validatecheck {
barcode barlen get barchars checksum get ne {
/bwipp.planetBadCheckDigit (Incorrect USPS PLANET check digit provided) //raiseerror exec
} if
/barcode barcode 0 barlen getinterval def
} if
 
% Create an array containing the character mappings
/encs
[ (22555) (55522) (55252) (55225) (52552)
6806,9 → 7873,6
(5) (5)
] def
 
% Create a string of the available characters
/barchars (0123456789) def
 
/bhs barlen 5 mul 7 add array def
/txt barlen 1 add array def
 
6821,15 → 7885,9
} for
bhs 0 heights putinterval % Put encoded digit into sbs
 
/checksum 0 def
0 1 barlen 1 sub {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/enc encs indx get def % Get the indxth encoding
/enc encs barcode i get 48 sub get def
/heights enc length array def
0 1 enc length 1 sub {
/j exch def
6837,11 → 7895,9
} for
bhs i 5 mul 1 add heights putinterval % Put encoded digit into sbs
txt i [barcode i 1 getinterval i 5 mul 1 add 3.312 mul textyoffset textfont textsize] put
/checksum checksum indx add def % checksum+=indx
} for
 
% Put the checksum character
/checksum 10 checksum 10 mod sub 10 mod def
/enc encs checksum get def
/heights enc length array def
0 1 enc length 1 sub {
6885,15 → 7941,21
/planet dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER planet--
 
% --BEGIN ENCODER royalmail--
% --DESC: Royal Mail 4 State Customer Code (RM4SCC)
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Royal Mail 4 State Customer Code
% --EXAM: LE28HS9Z
% --EXOP: includetext includecheckintext barcolor=FF0000
% --EXOP: includetext barcolor=FF0000
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp royalmail 0.0 2014121100 67915 67664
%%BeginData: 145 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/royalmail {
6905,6 → 7967,7
 
/dontdraw false def
/includetext false def % Enable/disable text
/validatecheck false def
/includecheckintext false def
/textfont /Courier def
/textsize 10 def
6926,7 → 7989,37
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
 
% Create a string of the available characters
/barchars (ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRS) def
/charvals 36 dict def
0 1 35 {charvals exch dup barchars exch 1 getinterval exch put} for
 
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
/bwipp.royalmailBadCharacter (RM4SCC must contain only capital letters and digits) //raiseerror exec
} if
} for
 
/barlen barcode length validatecheck {1 sub} if def
 
/checksumrow 0 def
/checksumcol 0 def
0 1 barlen 1 sub {
/i exch def
/indx charvals barcode i 1 getinterval get def
/checksumrow checksumrow indx 6 idiv add def
/checksumcol checksumcol indx 6 mod add def
} for
/checksum checksumrow 6 mod 6 mul checksumcol 6 mod add def
validatecheck {
barcode barlen get barchars checksum get ne {
/bwipp.royalmailBadCheckDigit (Incorrect RM4SCC check digit provided) //raiseerror exec
} if
/barcode barcode 0 barlen getinterval def
} if
 
% Create an array containing the character mappings
/encs
[ (3300) (2211) (2301) (2310) (3201) (3210)
6938,10 → 8031,6
(2) (3)
] def
 
% Create a string of the available characters
/barchars (ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRS) def
 
/barlen barcode length def
/encstr barlen 4 mul 6 add string def
/txt barlen 1 add array def
 
6948,26 → 8037,15
% Put start character
encstr 0 encs 36 get putinterval
/checksumrow 0 def
/checksumcol 0 def
0 1 barlen 1 sub {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/enc encs indx get def % Get the indxth encoding
encstr i 4 mul 1 add enc putinterval
/indx charvals barcode i 1 getinterval get def
encstr i 4 mul 1 add encs indx get putinterval
txt i [barcode i 1 getinterval i 4 mul 1 add 3.312 mul textyoffset textfont textsize] put
/checksumrow checksumrow indx 6 idiv add def
/checksumcol checksumcol indx 6 mod add def
} for
 
% Put the checksum character
/checksum checksumrow 6 mod 6 mul checksumcol 6 mod add def
/enc encs checksum get def
encstr barlen 4 mul 1 add enc putinterval
encstr barlen 4 mul 1 add encs checksum get putinterval
includecheckintext {
txt barlen [barchars checksum 1 getinterval barlen 4 mul 1 add 3.312 mul textyoffset textfont textsize] put
} {
7020,15 → 8098,21
/royalmail dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER royalmail--
 
% --BEGIN ENCODER auspost--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: AusPost 4 State Customer Code
% --EXAM: 5956439111ABA 9
% --EXOP: includetext custinfoenc=character
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp auspost 0.0 2014121100 78727 78454
%%BeginData: 202 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/auspost {
7228,15 → 8312,21
/auspost dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER auspost--
 
% --BEGIN ENCODER kix--
% --DESC: Royal Dutch TPG Post KIX 4-State Barcode
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Royal Dutch TPG Post KIX
% --EXAM: 1231FZ13XHS
% --EXOP: includetext includecheckintext
% --EXOP: includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp kix 0.0 2014121100 63057 62851
%%BeginData: 111 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/kix {
7248,7 → 8338,6
 
/dontdraw false def
/includetext false def % Enable/disable text
/includecheckintext false def
/textfont /Courier def
/textsize 10 def
/textyoffset -7 def
7282,7 → 8371,16
 
% Create a string of the available characters
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) def
/charvals 36 dict def
0 1 35 {charvals exch dup barchars exch 1 getinterval exch put} for
 
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
/bwipp.kixBadCharacter (KIX must contain only capital letters and digits) //raiseerror exec
} if
} for
 
/barlen barcode length def
/encstr barlen 4 mul string def
/txt barlen array def
7289,13 → 8387,8
0 1 barlen 1 sub {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/enc encs indx get def % Get the indxth encoding
encstr i 4 mul enc putinterval
/indx charvals barcode i 1 getinterval get def
encstr i 4 mul encs indx get putinterval
txt i [barcode i 1 getinterval i 4 mul 3.312 mul textyoffset textfont textsize] put
} for
 
7342,15 → 8435,21
/kix dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER kix--
 
% --BEGIN ENCODER japanpost--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Japan Post 4 State Customer Code
% --EXAM: 6540123789-A-K-Z
% --EXOP: includetext includecheckintext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp japanpost 0.0 2014121100 68076 67796
%%BeginData: 162 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/japanpost {
7510,15 → 8609,21
/japanpost dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER japanpost--
 
% --BEGIN ENCODER msi--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: MSI Modified Plessey
% --EXAM: 0123456789
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp msi 0.0 2014121100 73223 72733
%%BeginData: 139 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/msi {
7655,15 → 8760,21
/msi dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER msi--
 
% --BEGIN ENCODER plessey--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Plessey UK
% --EXAM: 01234ABCD
% --EXOP: includetext includecheckintext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp plessey 0.0 2014121100 69717 69236
%%BeginData: 146 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/plessey {
7675,6 → 8786,7
 
/dontdraw false def
/includetext false def % Enable/disable text
/validatecheck false def
/includecheckintext false def
/unidirectional false def
/textfont /Courier def
7698,41 → 8810,26
/textyoffset textyoffset cvr def
/height height cvr def
% Create an array containing the character mappings
/encs
[ (14141414) (32141414) (14321414) (32321414)
(14143214) (32143214) (14323214) (32323214)
(14141432) (32141432) (14321432) (32321432)
(14143232) (32143232) (14323232) (32323232)
(32321432) (541412323) (323)
] def
 
% Create a string of the available characters
/barchars (0123456789ABCDEF) def
/charvals 16 dict def
0 1 15 {charvals exch dup barchars exch 1 getinterval exch put} for
 
/barlen barcode length def % Length of the code
unidirectional {
/sbs barlen 8 mul 27 add string def
} {
/sbs barlen 8 mul 33 add string def
} ifelse
/txt barlen 2 add array def
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
/bwipp.plesseyBadCharacter (Plessey must contain only digits and letters A B C D E F) //raiseerror exec
} if
} for
 
/barlen barcode length validatecheck {2 sub} if def
 
% Calculate the checksums
/checkbits barlen 4 mul 8 add array def
checkbits barlen 4 mul [ 0 0 0 0 0 0 0 0 ] putinterval
 
% Put start character
sbs 0 encs 16 get putinterval
 
0 1 barlen 1 sub {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/enc encs indx get def % Get the indxth encoding
sbs i 8 mul 8 add enc putinterval % Put encoded digit into sbs
txt i [barcode i 1 getinterval i 20 mul 20 add textyoffset textfont textsize] put
/indx charvals barcode i 1 getinterval get def
checkbits i 4 mul [
indx 1 and
indx -1 bitshift 1 and
7740,8 → 8837,6
indx -3 bitshift
] putinterval
} for
 
% Checksum is last 8 bits of a CRC using a salt
/checksalt [ 1 1 1 1 0 1 0 0 1 ] def
0 1 barlen 4 mul 1 sub {
/i exch def
7752,17 → 8847,44
} for
} if
} for
 
% Calculate the value of the checksum digits
/checkval 0 def
0 1 7 {
/i exch def
/checkval checkval 2 i exp cvi checkbits barlen 4 mul i add get mul add def
} for
/checksum1 checkval 15 and def
/checksum2 checkval -4 bitshift def
validatecheck {
barcode barlen get barchars checksum1 get ne
barcode barlen 1 add get barchars checksum2 get ne or {
/bwipp.plesseyBadCheckDigits (Incorrect Plessey check digits provided) //raiseerror exec
} if
/barcode barcode 0 barlen getinterval def
} if
 
% Create an array containing the character mappings
/encs
[ (14141414) (32141414) (14321414) (32321414)
(14143214) (32143214) (14323214) (32323214)
(14141432) (32141432) (14321432) (32321432)
(14143232) (32143232) (14323232) (32323232)
(32321432) (541412323) (323)
] def
 
/sbs barlen 8 mul unidirectional {27} {33} ifelse add string def
/txt barlen 2 add array def
 
% Put start character
sbs 0 encs 16 get putinterval
 
0 1 barlen 1 sub {
/i exch def
/indx charvals barcode i 1 getinterval get def
sbs i 8 mul 8 add encs indx get putinterval
txt i [barcode i 1 getinterval i 20 mul 20 add textyoffset textfont textsize] put
} for
 
% Put the checksum characters
/checksum1 checkval 15 and def
/checksum2 checkval -4 bitshift def
sbs barlen 8 mul 8 add encs checksum1 get putinterval
sbs barlen 8 mul 16 add encs checksum2 get putinterval
includecheckintext {
7774,11 → 8896,7
} ifelse
 
% Put end character
unidirectional {
sbs barlen 8 mul 24 add encs 18 get putinterval
} {
sbs barlen 8 mul 24 add encs 17 get putinterval
} ifelse
sbs barlen 8 mul 24 add encs unidirectional {18} {17} ifelse get putinterval
 
% Return the arguments
<<
7800,15 → 8918,21
/plessey dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER plessey--
 
% --BEGIN ENCODER telepen--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Telepen
% --EXAM: 123456
% --EXOP: numeric includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp telepen 0.0 2014121100 71123 70715
%%BeginData: 173 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/telepen {
7979,15 → 9103,21
/telepen dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER telepen--
 
% --BEGIN ENCODER posicode--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: PosiCode
% --EXAM: ABC123
% --EXOP: version=b inkspread=-0.5 parsefnc includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp posicode 0.0 2014121100 109732 109034
%%BeginData: 389 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/posicode {
8374,15 → 9504,21
/posicode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER posicode--
 
% --BEGIN ENCODER codablockf--
% --REQUIRES preamble raiseerror renmatrix--
% --DESC: Codablock F
% --EXAM: CODABLOCK F 34567890123456789010040digit
% --EXOP: columns=8
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp codablockf 0.0 2014121100 136007 135295
%%BeginData: 512 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/codablockf {
8892,15 → 10028,21
/codablockf dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER codablockf--
 
% --BEGIN ENCODER code16k--
% --REQUIRES preamble raiseerror renmatrix--
% --DESC: Code 16K
% --EXAM: Abcd-1234567890-wxyZ
% --EXOP:
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp code16k 0.0 2014121100 156180 158943
%%BeginData: 710 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/code16k {
9608,15 → 10750,21
/code16k dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code16k--
 
% --BEGIN ENCODER code49--
% --REQUIRES preamble raiseerror renmatrix--
% --DESC: Code 49
% --EXAM: MULTIPLE ROWS IN CODE 49
% --EXOP:
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp code49 0.0 2014121100 264067 280283
%%BeginData: 1076 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/code49 {
10690,15 → 11838,21
/code49 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER code49--
 
% --BEGIN ENCODER channelcode--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Channel Code
% --EXAM: 3493
% --EXOP: height=0.5 includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp channelcode 0.0 2014121100 70263 69772
%%BeginData: 149 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/channelcode {
10726,20 → 11880,20
options {def} forall
 
/height height cvr def
/barlen barcode length def
 
barlen 2 ge barlen 7 le and {
/channels barlen 1 add def
% Validate the input
barcode length 2 lt barcode length 7 gt or {
/bwipp.channelcodeBadLength (Channel Code must be 2 to 7 digits) //raiseerror exec
} if
barcode {
dup 48 lt exch 57 gt or {
/bwipp.channelcodeBadCharacter (Channel Code must contain only digits) //raiseerror exec
} if
} forall
barcode cvi [ 26 292 3493 44072 576688 7742862 ] barcode length 2 sub get gt {
/bwipp.channelcodeTooBig (The Channel Code value is too big for the number of channels) //raiseerror exec
} if
 
% Determine finder
shortfinder {
/finder [ 1 1 1 1 1 ] def
} {
/finder [ 1 1 1 1 1 1 1 1 1 ] def
} ifelse
 
/nextb {
dup
dup s exch get exch
10785,14 → 11939,19
out
} bind def
 
/barlen barcode length def
 
% Determine finder
/finder shortfinder { [ 1 1 1 1 1 ] } { [ 1 1 1 1 1 1 1 1 1 ] } ifelse def
 
% Encode the main data
/data barcode cvi channels encode def
/data barcode cvi barlen 1 add encode def
 
% Determine check data
/check [] def
includecheck {
/mod23 [
[] [] []
[] []
[ 13 12 4 9 3 1 ]
[ 13 2 12 3 18 16 4 1 ]
[ 11 16 17 8 20 4 10 2 5 1 ]
10799,7 → 11958,7
[ 1 4 16 18 3 12 2 8 9 13 6 1 ]
[ 20 16 22 13 15 12 5 4 8 9 21 3 7 1 ]
[ 2 6 18 8 1 3 9 4 12 13 16 2 6 18 8 1 ]
] channels get def
] barlen get def
0
0 1 data length 1 sub {
dup data exch get 1 sub exch mod23 exch get mul add
10840,15 → 11999,21
/channelcode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER channelcode--
 
% --BEGIN ENCODER flattermarken--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Flattermarken
% --EXAM: 12345
% --EXOP: inkspread=-0.25
% --EXAM: 11099
% --EXOP: inkspread=-0.25 showborder borderleft=0 borderright=0
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp flattermarken 0.0 2014121100 59859 59559
%%BeginData: 93 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/flattermarken {
10865,6 → 12030,13
/textyoffset -7 def
/height 0.3 def
 
% Validate the input
barcode {
dup 48 lt exch 57 gt or {
/bwipp.flattermarkenBadCharacter (Flattermarken must contain only digits) //raiseerror exec
} if
} forall
 
% Parse the input options
options type /stringtype eq {
1 dict begin
10881,6 → 12053,13
/textyoffset textyoffset cvr def
/height height cvr def
 
% Validate the input
barcode {
dup 48 lt exch 57 gt or {
/bwipp.flattermarkenBadCharacter (Flattermarken must contain only digits) //raiseerror exec
} if
} forall
 
% Create an array containing the character mappings
/encs
[ (0018) (0117) (0216) (0315) (0414) (0513) (0612) (0711) (0810)
10925,15 → 12104,21
/flattermarken dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER flattermarken--
 
% --BEGIN ENCODER raw--
% --DESC: Raw bar space succession for custom symbologies
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Custom 1D symbology
% --EXAM: 331132131313411122131311333213114131131221323
% --EXOP: height=0.5
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp raw 0.0 2014121100 55669 55558
%%BeginData: 52 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/raw {
10941,7 → 12126,7
20 dict begin % Confine variables to local scope
 
/options exch def % We are given an option string
/sbs exch def % We are given a barcode string
/barcode exch def % We are given a barcode string
 
/dontdraw false def
/height 1 def
10959,12 → 12144,19
 
/height height cvr def
 
% Validate input
barcode {
dup 49 lt exch 57 gt or {
/bwipp.rawBadCharacter (Raw must contain only digits 1 to 9) //raiseerror exec
} if
} forall
 
% Return the arguments
<<
/ren //renlinear
/sbs [sbs {48 sub} forall]
/bhs [sbs length 1 add 2 idiv {height} repeat]
/bbs [sbs length 1 add 2 idiv {0} repeat]
/sbs [barcode {48 sub} forall]
/bhs [barcode length 1 add 2 idiv {height} repeat]
/bbs [barcode length 1 add 2 idiv {0} repeat]
/opt options
>>
 
10976,15 → 12168,21
/raw dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER raw--
 
% --BEGIN ENCODER daft--
% --DESC: Raw DAFT succession for custom 4 state symbologies
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Custom 4 state symbology
% --EXAM: FATDAFTDAD
% --EXOP:
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp daft 0.0 2014121100 58923 58681
%%BeginData: 76 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/daft {
11010,6 → 12208,12
 
/height height cvr def
 
barcode {
dup 68 ne exch dup 65 ne exch dup 70 ne exch 84 ne and and and {
/bwipp.daftBadCharacter (DAFT must contain only characters D, A, F and T) //raiseerror exec
} if
} forall
 
/barlen barcode length def
 
/bbs barlen array def
11052,15 → 12256,21
/daft dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER daft--
 
% --BEGIN ENCODER symbol--
% --REQUIRES preamble raiseerror renlinear--
% --DESC: Miscellaneous symbols
% --EXAM: fima
% --EXOP: backgroundcolor=DD000011
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp symbol 0.0 2014121100 58527 58256
%%BeginData: 72 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/symbol {
11083,30 → 12293,36
} if
options {def} forall
 
barcode (fima) eq {
/sbs [2.25 2.25 2.25 11.25 2.25 11.25 2.25 2.25 2.25] def
/bhs [.625 .625 .625 .625 .625] def
/bbs [0 0 0 0 0] def
} if
/symbols <<
/fima {
/sbs [2.25 2.25 2.25 11.25 2.25 11.25 2.25 2.25 2.25] def
/bhs [.625 .625 .625 .625 .625] def
/bbs [0 0 0 0 0] def
} bind
/fimb {
/sbs [2.25 6.75 2.25 2.25 2.25 6.25 2.25 2.25 2.25 6.75 2.25] def
/bhs [.625 .625 .625 .625 .625 .625] def
/bbs [0 0 0 0 0 0] def
} bind
/fimc {
/sbs [2.25 2.25 2.25 6.75 2.25 6.75 2.25 6.75 2.25 2.25 2.25] def
/bhs [.625 .625 .625 .625 .625 .625] def
/bbs [0 0 0 0 0 0] def
} bind
/fimd {
/sbs [2.25 2.25 2.25 2.25 2.25 6.75 2.25 6.75 2.25 2.25 2.25 2.25 2.25] def
/bhs [.625 .625 .625 .625 .625 .625 .625] def
/bbs [0 0 0 0 0 0 0] def
} bind
>> def
 
barcode (fimb) eq {
/sbs [2.25 6.75 2.25 2.25 2.25 6.25 2.25 2.25 2.25 6.75 2.25] def
/bhs [.625 .625 .625 .625 .625 .625] def
/bbs [0 0 0 0 0 0] def
% Valiate input
symbols barcode known not {
/bwipp.symbolUnknownSymbol (Unknown symbol name provided) //raiseerror exec
} if
 
barcode (fimc) eq {
/sbs [2.25 2.25 2.25 6.75 2.25 6.75 2.25 6.75 2.25 2.25 2.25] def
/bhs [.625 .625 .625 .625 .625 .625] def
/bbs [0 0 0 0 0 0] def
} if
barcode (fimd) eq {
/sbs [2.25 2.25 2.25 2.25 2.25 6.75 2.25 6.75 2.25 2.25 2.25 2.25 2.25] def
/bhs [.625 .625 .625 .625 .625 .625 .625] def
/bbs [0 0 0 0 0 0 0] def
} if
symbols barcode get exec
% Return the arguments
<<
/ren //renlinear
11124,15 → 12340,21
/symbol dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER symbol--
 
% --BEGIN ENCODER pdf417--
% --REQUIRES preamble raiseerror renmatrix--
% --DESC: PDF417
% --EXAM: This is PDF417
% --EXOP:
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp pdf417 0.0 2014121100 196239 198381
%%BeginData: 873 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/pdf417 {
11148,6 → 12370,7
/columns 0 def
/rows 0 def
/rowmult 3 def
/encoding (auto) def
/ccc false def
/raw false def
/parse false def
11189,8 → 12412,10
} loop
} if
 
raw {/encoding (raw) def} if
 
% Convert input into array of codewords
raw {
encoding (raw) eq {
/datcws barcode length array def
/i 0 def /j 0 def
{ % loop
11201,54 → 12426,419
/j j 1 add def
} loop
/datcws datcws 0 j getinterval def
} { % Simple autoencoder from input to codewords using byte mode
/barlen barcode length def
barlen 6 mod 0 eq {
/datcws barlen 6 idiv 5 mul 1 add array def
datcws 0 924 put
} {
/datcws barlen 6 idiv 5 mul barlen 6 mod add 1 add array def
datcws 0 901 put
} ifelse
} if
 
% Rebase groups of 6 bytes splitting into 3 byte chunks
0 1 barlen 6 idiv 1 sub {
/i exch def
/msbs [ barcode i 6 mul 3 getinterval {} forall ] def
/barcode [ barcode {} forall ] def
/barlen barcode length def
 
ccc {/encoding (ccc) def} if
 
/encb {
/in exch def
/inlen in length def
/out inlen 6 idiv 5 mul inlen 6 mod add array def
0 1 inlen 6 idiv 1 sub {
/k exch def
/msbs [ in k 6 mul 3 getinterval aload pop ] def
/mscs [
msbs aload pop exch 256 mul add exch 65536 mul add
3 {dup 900 mod exch 900 idiv} repeat
msbs aload pop exch 256 mul add exch 65536 mul add
3 {dup 900 mod exch 900 idiv} repeat
] def
/lsbs [barcode i 6 mul 3 add 3 getinterval {} forall] def
/lsbs [ in k 6 mul 3 add 3 getinterval aload pop ] def
/lscs [
lsbs aload pop exch 256 mul add exch 65536 mul add
3 {dup 900 mod exch 900 idiv} repeat
] def
/cws 5 array def
lscs 0 get mscs 0 get 316 mul add
cws 4 2 index 900 mod put
out k 5 mul 4 add 2 index 900 mod put
900 idiv lscs 1 get add mscs 0 get 641 mul add mscs 1 get 316 mul add
cws 3 2 index 900 mod put
900 idiv lscs 2 get add mscs 0 get 20 mul add mscs 1 get 641 mul add mscs 2 get 316 mul add
cws 2 2 index 900 mod put
out k 5 mul 3 add 2 index 900 mod put
900 idiv lscs 2 get add mscs 0 get 20 mul add mscs 1 get 641 mul add mscs 2 get 316 mul add
out k 5 mul 2 add 2 index 900 mod put
900 idiv lscs 3 get add mscs 1 get 20 mul add mscs 2 get 641 mul add
cws 1 2 index 900 mod put
out k 5 mul 1 add 2 index 900 mod put
900 idiv mscs 2 get 20 mul add
cws 0 3 -1 roll 900 mod put
datcws i 5 mul 1 add cws putinterval
out k 5 mul 3 -1 roll 900 mod put
} for
 
% Add the remaining bytes to the end of the codewords
/rem barlen 6 mod def
/rem inlen 6 mod def
rem 0 ne {
datcws datcws length rem sub
[ barcode barlen rem sub rem getinterval {} forall ]
out out length rem sub
[ in inlen rem sub rem getinterval aload pop ]
putinterval
} if
out
} bind def
encoding (byte) eq encoding (ccc) eq or {
/datcws barlen 6 idiv 5 mul barlen 6 mod add 1 add array def
datcws 0 barlen 6 mod 0 eq {924} {901} ifelse put
datcws 1 barcode encb putinterval
encoding (ccc) eq {/datcws [920 datcws aload pop] def} if
} if
 
ccc {/datcws [920 datcws aload pop] def} if
encoding (auto) eq {
 
} ifelse
% Modes and text submodes
/T 0 def /N 1 def /B 2 def
/A 0 def /L 1 def /M 2 def /P 3 def
% Special function characters for mode switching
/tl -1 def /nl -2 def /bl -3 def /bl6 -4 def /bs -5 def
% Special function characters for text mode
/al -6 def /ll -7 def /ml -8 def /pl -9 def /as -10 def /ps -11 def
% Character maps for each state
/charmaps [
% A L M P
[ (A) (a) (0) (;) ] % 0
[ (B) (b) (1) (<) ] % 1
[ (C) (c) (2) (>) ] % 2
[ (D) (d) (3) (@) ] % 3
[ (E) (e) (4) ([) ] % 4
[ (F) (f) (5) 92 ] % 5
[ (G) (g) (6) (]) ] % 6
[ (H) (h) (7) (_) ] % 7
[ (I) (i) (8) (`) ] % 8
[ (J) (j) (9) (~) ] % 9
[ (K) (k) (&) (!) ] % 10
[ (L) (l) 13 13 ] % 11
[ (M) (m) 9 9 ] % 12
[ (N) (n) (,) (,) ] % 13
[ (O) (o) (:) (:) ] % 14
[ (P) (p) (#) 10 ] % 15
[ (Q) (q) (-) (-) ] % 16
[ (R) (r) (.) (.) ] % 17
[ (S) (s) ($) ($) ] % 18
[ (T) (t) (/) (/) ] % 19
[ (U) (u) (+) (") ] % 20
[ (V) (v) (%) (|) ] % 21
[ (W) (w) (*) (*) ] % 22
[ (X) (x) (=) 40 ] % 23
[ (Y) (y) (^) 41 ] % 24
[ (Z) (z) pl (?) ] % 25
[ ( ) ( ) ( ) ({) ] % 26
[ ll as ll (}) ] % 27
[ ml ml al (') ] % 28
[ ps ps ps al ] % 29
] def
% Invert charmaps to give character to value maps for each state
/charvals [ 30 dict 30 dict 30 dict 30 dict ] def
/alltext 104 dict def
0 1 charmaps length 1 sub {
/i exch def
/encs charmaps i get def
0 1 3 {
/j exch def
encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
dup charvals j get exch i put
alltext exch -1 put
} for
} for
/e 10000 def % "Empty"
/latlen [ % Bit length of latch between submodes
% To: A L M P From
[ 0 1 1 2 ] % A
[ 2 0 1 2 ] % L
[ 1 1 0 1 ] % M
[ 1 2 2 0 ] % P
] def
/latseq [ % Latch sequences between submodes
% To: A L M P From
[ [] [ll] [ml] [ml pl] ] % A
[ [ml al] [] [ml] [ml pl] ] % L
[ [al] [ll] [] [pl] ] % M
[ [al] [al ll] [al ml] [] ] % P
] def
/shftlen [ % Bit length of shift to submode
% To: A L M P From
[ e e e 1 ] % A
[ 1 e e 1 ] % L
[ e e e 1 ] % M
[ e e e e ] % P
] def
% Determine runlengths of digits
/numdigits [ barlen {0} repeat 0 ] def
/numtext [ barlen {0} repeat 0 ] def
/numbytes [ barlen {0} repeat 0 ] def
barlen 1 sub -1 0 {
/i exch def
barcode i get dup 48 ge exch 57 le and {
numdigits i numdigits i 1 add get 1 add put
} if
alltext barcode i get known numdigits i get 13 lt and {
numtext i numtext i 1 add get 1 add put
} if
numtext i get 5 lt numdigits i get 13 lt and {
numbytes i numbytes i 1 add get 1 add put
} if
} for
/numdigits numdigits 0 barlen getinterval def
/numtext numtext 0 barlen getinterval def
/numbytes numbytes 0 barlen getinterval def
/seq [] def /seqlen 0 def /state T def /p 0 def { % loop
p barlen eq {exit} if
/n numdigits p get def
n 13 ge {
/seq [
seq aload pop
nl
[ barcode p n getinterval aload pop ]
] def
/state N def
/p p n add def
/seqlen seqlen 1 add n add def
} { % next
/t numtext p get def
t 5 ge {
/seq [
seq aload pop
state T ne {tl} if
[ barcode p t getinterval aload pop ]
] def
/state T def
/p p t add def
/seqlen seqlen 1 add t add def % ish
} { % next
/b numbytes p get def
b 1 eq state T eq and {
/seq [
seq aload pop
bs
[ barcode p get ]
] def
/p p b add def
/seqlen seqlen 2 add def
} { % next
/seq [
seq aload pop
b 6 mod 0 ne {bl} {bl6} ifelse
[ barcode p b getinterval aload pop ]
] def
/state B def
/p p b add def
/seqlen seqlen 1 add b add def
} ifelse } ifelse } ifelse
} loop
/latchcws <<
tl 900 bl 901 bl6 924 nl 902 bs 913
>> def
% Submode encoding functions
/enca {charvals A get exch get} bind def
/encl {charvals L get exch get} bind def
/encm {charvals M get exch get} bind def
/encp {charvals P get exch get} bind def
/textencfuncs [ /enca /encl /encm /encp ] def
/addtotext {
text exch l exch put
/l l 1 add def
} bind def
/enct {
/in exch def
/curlen [ e e e e ] def
curlen submode 0 put
/curseq [ [] [] [] [] ] def
% Derive the optimal sequences ending in each submode
in {
/char exch def
% Check for optimisations in the current sequences by latching from x to y
{ % loop
/imp false def
[ A L M P ] {
/x exch def
[ A L M P ] {
/y exch def
/cost curlen x get latlen x get y get add def
cost curlen y get lt {
curlen y cost put
curseq y [
curseq x get aload pop
latseq x get y get aload pop
] put
/imp true def
} if
} forall
} forall
imp not {exit} if % Repeat unless no improvement
} loop
% Determine optimal next sequences for each valid encoding
/nxtlen [ e e e e ] def
/nxtseq 4 array def
[ A L M P ] {
/x exch def
{ % loop for common exit
charvals x get char known not {exit} if
% Extend directly
/cost curlen x get 1 add def
cost nxtlen x get lt {
nxtlen x cost put
nxtseq x [ curseq x get aload pop char ] put
} if
% Optimise for direct shifts from y to x
[ A L M P ] {
/y exch def
x y ne {
/cost curlen y get shftlen y get x get add 1 add def
cost nxtlen y get lt {
nxtlen y cost put
nxtseq y [
curseq y get aload pop
x A eq {as} {ps} ifelse
char
] put
} if
} if
} forall
exit
} loop
} forall
/curlen nxtlen def
/curseq nxtseq def
} forall
% Select the optimal sequence
/minseq e def
[ A L M P ] {
/k exch def
curlen k get minseq lt {
/minseq curlen k get def
/txtseq curseq k get def
} if
} forall
% Encode the sequence
/text minseq array def
/k 0 def /l 0 def {
k txtseq length ge {exit} if
/char txtseq k get def
% Encode character
char textencfuncs submode get load exec addtotext
/k k 1 add def
% Encode shifted next character
char as eq char ps eq or {
txtseq k get char as eq {enca} {encp} ifelse addtotext
/k k 1 add def
} if
% Latches to new submode
char al eq {/submode A def} if
char ll eq {/submode L def} if
char ml eq {/submode M def} if
char pl eq {/submode P def} if
} loop
text length 2 mod 1 eq {
submode P eq {
/pad al encp def
/submode A def
} {
/pad ps textencfuncs submode get load exec def
} ifelse
/text [ text aload pop pad ] def
} if
/out text length 2 idiv array def
0 1 out length 1 sub {
/k exch def
out k text k 2 mul get 30 mul text k 2 mul 1 add get add put
} for
out
} bind def
/encn {
/in exch def
/out [] def
0 44 in length 1 sub {
/k exch def
/gmod [
1 in k in length k sub dup 44 gt {pop 44} if getinterval
{48 sub} forall
] def
/cwn [] def {
/dv 900 def
/gmul [] def /val 0 def {
gmod length 0 eq {exit} if
/val val 10 mul gmod 0 get add def
/gmod gmod 1 gmod length 1 sub getinterval def
val dv lt {
gmul length 0 ne {
/gmul [ gmul aload pop 0 ] def
} if
} {
/gmul [ gmul aload pop val dv idiv ] def
} ifelse
/val val dv mod def
} loop
/dv val def
/cwn [ dv cwn aload pop ] def
/gmod gmul def
gmul length 0 eq {exit} if
} loop
/out [ out aload pop cwn aload pop ] def
} for
out
} bind def
/encfuncs [ /enct /encn /encb ] def
/addtocws {
dup datcws j 3 -1 roll putinterval
length j add /j exch def
} bind def
% Encode the sequence
/state T def /submode A def
/datcws seqlen array def
/i 0 def /j 0 def {
i seq length ge {exit} if
/chars seq i get def
chars type /arraytype eq { % Encode data according to mode
chars encfuncs state get load exec addtocws
} { % Encode the latch to new state or byte shift
[ latchcws chars get ] addtocws
chars tl eq {/state T def /submode A def} if
chars nl eq {/state N def} if
chars bl eq chars bl6 eq or {/state B def} if
chars bs eq {
/i i 1 add def
seq i get encb addtocws
} if
} ifelse
/i i 1 add def
} loop
/datcws datcws 0 j getinterval def
} if
 
% Determine the error correction level if unspecified
/m datcws length def
11635,15 → 13225,21
/pdf417 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER pdf417--
 
% --BEGIN ENCODER micropdf417--
% --REQUIRES preamble raiseerror renmatrix--
% --DESC: MicroPDF417
% --EXAM: MicroPDF417
% --EXOP:
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp micropdf417 0.0 2014121100 206374 212034
%%BeginData: 952 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/micropdf417 {
11657,6 → 13253,7
/columns 0 def
/rows 0 def
/rowmult 2 def
/encoding (auto) def
/cca false def
/ccb false def
/raw false def
11677,8 → 13274,6
/rows rows cvi def
/rowmult rowmult cvr def
 
cca {/raw true def} if
 
% Parse ordinals of the form ^NNN to ASCII
parse {
/msg barcode length string def
11700,8 → 13295,11
} loop
} if
 
raw {/encoding (raw) def} if
cca {/encoding (cca) def} if
 
% Convert input into array of codewords
raw {
encoding (raw) eq encoding (cca) eq or {
/datcws barcode length array def
/i 0 def /j 0 def
{ % loop
11712,55 → 13310,420
/j j 1 add def
} loop
/datcws datcws 0 j getinterval def
} { % Simple autoencoder from input to codewords using byte mode
/barlen barcode length def
barlen 6 mod 0 eq {
/datcws barlen 6 idiv 5 mul 1 add array def
datcws 0 924 put
} {
/datcws barlen 6 idiv 5 mul barlen 6 mod add 1 add array def
datcws 0 901 put
} ifelse
} if
 
% Rebase groups of 6 bytes splitting into 3 byte chunks
0 1 barlen 6 idiv 1 sub {
/i exch def
/msbs [ barcode i 6 mul 3 getinterval {} forall ] def
/barcode [ barcode {} forall ] def
/barlen barcode length def
 
ccb {/encoding (ccb) def} if
 
/encb {
/in exch def
/inlen in length def
/out inlen 6 idiv 5 mul inlen 6 mod add array def
0 1 inlen 6 idiv 1 sub {
/k exch def
/msbs [ in k 6 mul 3 getinterval aload pop ] def
/mscs [
msbs aload pop exch 256 mul add exch 65536 mul add
3 {dup 900 mod exch 900 idiv} repeat
msbs aload pop exch 256 mul add exch 65536 mul add
3 {dup 900 mod exch 900 idiv} repeat
] def
/lsbs [barcode i 6 mul 3 add 3 getinterval {} forall] def
/lsbs [ in k 6 mul 3 add 3 getinterval aload pop ] def
/lscs [
lsbs aload pop exch 256 mul add exch 65536 mul add
3 {dup 900 mod exch 900 idiv} repeat
] def
/cws 5 array def
lscs 0 get mscs 0 get 316 mul add
cws 4 2 index 900 mod put
out k 5 mul 4 add 2 index 900 mod put
900 idiv lscs 1 get add mscs 0 get 641 mul add mscs 1 get 316 mul add
cws 3 2 index 900 mod put
900 idiv lscs 2 get add mscs 0 get 20 mul add mscs 1 get 641 mul add mscs 2 get 316 mul add
cws 2 2 index 900 mod put
out k 5 mul 3 add 2 index 900 mod put
900 idiv lscs 2 get add mscs 0 get 20 mul add mscs 1 get 641 mul add mscs 2 get 316 mul add
out k 5 mul 2 add 2 index 900 mod put
900 idiv lscs 3 get add mscs 1 get 20 mul add mscs 2 get 641 mul add
cws 1 2 index 900 mod put
out k 5 mul 1 add 2 index 900 mod put
900 idiv mscs 2 get 20 mul add
cws 0 3 -1 roll 900 mod put
datcws i 5 mul 1 add cws putinterval
out k 5 mul 3 -1 roll 900 mod put
} for
 
% Add the remaining bytes to the end of the codewords
/rem barlen 6 mod def
/rem inlen 6 mod def
rem 0 ne {
datcws datcws length rem sub
[ barcode barlen rem sub rem getinterval {} forall ]
out out length rem sub
[ in inlen rem sub rem getinterval aload pop ]
putinterval
} if
out
} bind def
 
ccb {/datcws [920 datcws aload pop] def} if
encoding (byte) eq encoding (ccb) eq or {
/datcws barlen 6 idiv 5 mul barlen 6 mod add 1 add array def
datcws 0 barlen 6 mod 0 eq {924} {901} ifelse put
datcws 1 barcode encb putinterval
encoding (ccb) eq {/datcws [920 datcws aload pop] def} if
} if
 
} ifelse
encoding (auto) eq {
 
% Modes and text submodes
/T 0 def /N 1 def /B 2 def
/A 0 def /L 1 def /M 2 def /P 3 def
% Special function characters for mode switching
/tl -1 def /nl -2 def /bl -3 def /bl6 -4 def /bs -5 def
% Special function characters for text mode
/al -6 def /ll -7 def /ml -8 def /pl -9 def /as -10 def /ps -11 def
% Character maps for each state
/charmaps [
% A L M P
[ (A) (a) (0) (;) ] % 0
[ (B) (b) (1) (<) ] % 1
[ (C) (c) (2) (>) ] % 2
[ (D) (d) (3) (@) ] % 3
[ (E) (e) (4) ([) ] % 4
[ (F) (f) (5) 92 ] % 5
[ (G) (g) (6) (]) ] % 6
[ (H) (h) (7) (_) ] % 7
[ (I) (i) (8) (`) ] % 8
[ (J) (j) (9) (~) ] % 9
[ (K) (k) (&) (!) ] % 10
[ (L) (l) 13 13 ] % 11
[ (M) (m) 9 9 ] % 12
[ (N) (n) (,) (,) ] % 13
[ (O) (o) (:) (:) ] % 14
[ (P) (p) (#) 10 ] % 15
[ (Q) (q) (-) (-) ] % 16
[ (R) (r) (.) (.) ] % 17
[ (S) (s) ($) ($) ] % 18
[ (T) (t) (/) (/) ] % 19
[ (U) (u) (+) (") ] % 20
[ (V) (v) (%) (|) ] % 21
[ (W) (w) (*) (*) ] % 22
[ (X) (x) (=) 40 ] % 23
[ (Y) (y) (^) 41 ] % 24
[ (Z) (z) pl (?) ] % 25
[ ( ) ( ) ( ) ({) ] % 26
[ ll as ll (}) ] % 27
[ ml ml al (') ] % 28
[ ps ps ps al ] % 29
] def
% Invert charmaps to give character to value maps for each state
/charvals [ 30 dict 30 dict 30 dict 30 dict ] def
/alltext 104 dict def
0 1 charmaps length 1 sub {
/i exch def
/encs charmaps i get def
0 1 3 {
/j exch def
encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
dup charvals j get exch i put
alltext exch -1 put
} for
} for
/e 10000 def % "Empty"
/latlen [ % Bit length of latch between submodes
% To: A L M P From
[ 0 1 1 2 ] % A
[ 2 0 1 2 ] % L
[ 1 1 0 1 ] % M
[ 1 2 2 0 ] % P
] def
/latseq [ % Latch sequences between submodes
% To: A L M P From
[ [] [ll] [ml] [ml pl] ] % A
[ [ml al] [] [ml] [ml pl] ] % L
[ [al] [ll] [] [pl] ] % M
[ [al] [al ll] [al ml] [] ] % P
] def
/shftlen [ % Bit length of shift to submode
% To: A L M P From
[ e e e 1 ] % A
[ 1 e e 1 ] % L
[ e e e 1 ] % M
[ e e e e ] % P
] def
% Determine runlengths of digits
/numdigits [ barlen {0} repeat 0 ] def
/numtext [ barlen {0} repeat 0 ] def
/numbytes [ barlen {0} repeat 0 ] def
barlen 1 sub -1 0 {
/i exch def
barcode i get dup 48 ge exch 57 le and {
numdigits i numdigits i 1 add get 1 add put
} if
alltext barcode i get known numdigits i get 13 lt and {
numtext i numtext i 1 add get 1 add put
} if
numtext i get 5 lt numdigits i get 13 lt and {
numbytes i numbytes i 1 add get 1 add put
} if
} for
/numdigits numdigits 0 barlen getinterval def
/numtext numtext 0 barlen getinterval def
/numbytes numbytes 0 barlen getinterval def
/seq [] def /seqlen 0 def /state B def /p 0 def { % loop
p barlen eq {exit} if
/n numdigits p get def
n 13 ge {
/seq [
seq aload pop
nl
[ barcode p n getinterval aload pop ]
] def
/state N def
/p p n add def
/seqlen seqlen 1 add n add def
} { % next
/t numtext p get def
t 5 ge {
/seq [
seq aload pop
state T ne {tl} if
[ barcode p t getinterval aload pop ]
] def
/state T def
/p p t add def
/seqlen seqlen 1 add t add def % ish
} { % next
/b numbytes p get def
b 1 eq state T eq and {
/seq [
seq aload pop
bs
[ barcode p get ]
] def
/p p b add def
/seqlen seqlen 2 add def
} { % next
/seq [
seq aload pop
b 6 mod 0 ne {bl} {bl6} ifelse
[ barcode p b getinterval aload pop ]
] def
/state B def
/p p b add def
/seqlen seqlen 1 add b add def
} ifelse } ifelse } ifelse
} loop
/latchcws <<
tl 900 bl 901 bl6 924 nl 902 bs 913
>> def
% Submode encoding functions
/enca {charvals A get exch get} bind def
/encl {charvals L get exch get} bind def
/encm {charvals M get exch get} bind def
/encp {charvals P get exch get} bind def
/textencfuncs [ /enca /encl /encm /encp ] def
/addtotext {
text exch l exch put
/l l 1 add def
} bind def
/enct {
/in exch def
/curlen [ e e e e ] def
curlen submode 0 put
/curseq [ [] [] [] [] ] def
% Derive the optimal sequences ending in each submode
in {
/char exch def
% Check for optimisations in the current sequences by latching from x to y
{ % loop
/imp false def
[ A L M P ] {
/x exch def
[ A L M P ] {
/y exch def
/cost curlen x get latlen x get y get add def
cost curlen y get lt {
curlen y cost put
curseq y [
curseq x get aload pop
latseq x get y get aload pop
] put
/imp true def
} if
} forall
} forall
imp not {exit} if % Repeat unless no improvement
} loop
% Determine optimal next sequences for each valid encoding
/nxtlen [ e e e e ] def
/nxtseq 4 array def
[ A L M P ] {
/x exch def
{ % loop for common exit
charvals x get char known not {exit} if
% Extend directly
/cost curlen x get 1 add def
cost nxtlen x get lt {
nxtlen x cost put
nxtseq x [ curseq x get aload pop char ] put
} if
% Optimise for direct shifts from y to x
[ A L M P ] {
/y exch def
x y ne {
/cost curlen y get shftlen y get x get add 1 add def
cost nxtlen y get lt {
nxtlen y cost put
nxtseq y [
curseq y get aload pop
x A eq {as} {ps} ifelse
char
] put
} if
} if
} forall
exit
} loop
} forall
/curlen nxtlen def
/curseq nxtseq def
} forall
% Select the optimal sequence
/minseq e def
[ A L M P ] {
/k exch def
curlen k get minseq lt {
/minseq curlen k get def
/txtseq curseq k get def
} if
} forall
% Encode the sequence
/text minseq array def
/k 0 def /l 0 def {
k txtseq length ge {exit} if
/char txtseq k get def
% Encode character
char textencfuncs submode get load exec addtotext
/k k 1 add def
% Encode shifted next character
char as eq char ps eq or {
txtseq k get char as eq {enca} {encp} ifelse addtotext
/k k 1 add def
} if
% Latches to new submode
char al eq {/submode A def} if
char ll eq {/submode L def} if
char ml eq {/submode M def} if
char pl eq {/submode P def} if
} loop
text length 2 mod 1 eq {
submode P eq {
/pad al encp def
/submode A def
} {
/pad ps textencfuncs submode get load exec def
} ifelse
/text [ text aload pop pad ] def
} if
/out text length 2 idiv array def
0 1 out length 1 sub {
/k exch def
out k text k 2 mul get 30 mul text k 2 mul 1 add get add put
} for
out
} bind def
/encn {
/in exch def
/out [] def
0 44 in length 1 sub {
/k exch def
/gmod [
1 in k in length k sub dup 44 gt {pop 44} if getinterval
{48 sub} forall
] def
/cwn [] def {
/dv 900 def
/gmul [] def /val 0 def {
gmod length 0 eq {exit} if
/val val 10 mul gmod 0 get add def
/gmod gmod 1 gmod length 1 sub getinterval def
val dv lt {
gmul length 0 ne {
/gmul [ gmul aload pop 0 ] def
} if
} {
/gmul [ gmul aload pop val dv idiv ] def
} ifelse
/val val dv mod def
} loop
/dv val def
/cwn [ dv cwn aload pop ] def
/gmod gmul def
gmul length 0 eq {exit} if
} loop
/out [ out aload pop cwn aload pop ] def
} for
out
} bind def
/encfuncs [ /enct /encn /encb ] def
/addtocws {
dup datcws j 3 -1 roll putinterval
length j add /j exch def
} bind def
% Encode the sequence
/state T def /submode A def
/datcws seqlen array def
/i 0 def /j 0 def {
i seq length ge {exit} if
/chars seq i get def
chars type /arraytype eq { % Encode data according to mode
chars encfuncs state get load exec addtocws
} { % Encode the latch to new state or byte shift
[ latchcws chars get ] addtocws
chars tl eq {/state T def /submode A def} if
chars nl eq {/state N def} if
chars bl eq chars bl6 eq or {/state B def} if
chars bs eq {
/i i 1 add def
seq i get encb addtocws
} if
} ifelse
/i i 1 add def
} loop
/datcws datcws 0 j getinterval def
} if
 
% Basic metrics for the each symbol
% c r ecw rl rc rr
/metrics [
12226,15 → 14189,21
/micropdf417 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER micropdf417--
 
% --BEGIN ENCODER datamatrix--
% --REQUIRES preamble raiseerror renmatrix--
% --DESC: Data Matrix
% --EXAM: This is Data Matrix!
% --EXOP: rows=32 columns=32
% --EXOP:
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp datamatrix 0.0 2014121100 198474 217339
%%BeginData: 844 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/datamatrix {
12247,8 → 14216,6
/dontdraw false def
/columns 0 def
/rows 0 def
/encoding (ascii) def
/raw false def
/parse false def
/parsefnc false def
 
12289,79 → 14256,32
 
/barlen barcode length def
 
raw {/encoding (raw) def} if
 
encoding (raw) eq {
/cws barlen array def
/i 0 def /j 0 def
{ % loop
i barlen eq {exit} if
/cw barcode i 1 add 3 getinterval cvi def
cws j cw put
/i i 4 add def
/j j 1 add def
} loop
/cws cws 0 j getinterval def
} if
 
% Special function characters
/fn1 -1 def
 
encoding (ascii) eq {
/fncvals <<
(FNC1) fn1
>> def
/msg barlen array def
/i 0 def /j 0 def {
i barlen eq {exit} if
/char barcode i get def
parsefnc char 94 eq and i barlen 4 sub lt and {
barcode i 1 add get 94 ne {
/char fncvals barcode i 1 add 4 getinterval get def
/i i 4 add def
} {
/i i 1 add def
} ifelse
} if
msg j char put
/i i 1 add def
/j j 1 add def
} loop
/msg msg 0 j getinterval def
/msglen msg length def
 
/cws msglen 2 mul array def
/i 0 def /j 0 def
{ % loop
i msglen eq {exit} if
/char msg i get def
char fn1 eq { % FNC1
cws j 232 put
% Convert input into bytes accounting for FNC characters
/fnc1 -1 def /prog -2 def /m05 -3 def /m06 -4 def
/fncvals <<
(FNC1) fnc1
(PROG) prog
(MAC5) m05
(MAC6) m06
>> def
/msg barlen array def
/i 0 def /j 0 def {
i barlen eq {exit} if
/char barcode i get def
parsefnc char 94 eq and i barlen 4 sub lt and {
barcode i 1 add get 94 ne {
/char fncvals barcode i 1 add 4 getinterval get def
/i i 4 add def
} {
/i i 1 add def
/j j 1 add def
} { char 48 ge char 57 le and i msglen 1 sub lt and {
msg i 1 add get dup 48 ge exch 57 le and { % Digit pair
cws j msg i get 48 sub 10 mul msg i 1 add get 48 sub add 130 add put
/i i 2 add def
/j j 1 add def
} { % Singular digit
cws j char 1 add put
/i i 1 add def
/j j 1 add def
} ifelse
} { char 127 le { % ASCII
cws j char 1 add put
/i i 1 add def
/j j 1 add def
} { % Extended ASCII
cws j 235 put
cws j 1 add char 127 sub put
/i i 1 add def
/j j 2 add def
} ifelse } ifelse } ifelse
} loop
/cws cws 0 j getinterval def
} if
} ifelse
} if
msg j char put
/i i 1 add def
/j j 1 add def
} loop
/msg msg 0 j getinterval def
/msglen msg length def
 
% Basic metrics for the each symbol
% rows cols regh regv rscw rsbl
12400,12 → 14320,12
[ 16 48 1 2 28 1 ]
] def
 
% Select metrics of an appropriate symbol
% Create array of codewords remaining to make a full symbol
/urows rows def
/ucols columns def
/i 0 def
{ % loop
/m metrics i get def
/fullcws [] def
metrics {
/m exch def
/rows m 0 get def % Rows in symbol
/cols m 1 get def % Columns in symbol
/regh m 2 get def % Horizontal regions
12414,22 → 14334,466
/rsbl m 5 get def % Error correction blocks
/mrows rows 2 regh mul sub def % Rows in the mapping matrix
/mcols cols 2 regv mul sub def % Columns in the mapping matrix
/rrows mrows regh idiv def % Rows per region
/rcols mcols regv idiv def % Columns per region
/ncws mrows mcols mul 8 idiv rscw sub def % Data codewords
/okay true def
cws length ncws gt {/okay false def} if
urows 0 ne urows rows ne and {/okay false def} if
ucols 0 ne ucols cols ne and {/okay false def} if
okay {exit} if
/i i 1 add def
urows 0 eq ucols 0 eq or rows cols ne and {/okay false def} if
okay {/fullcws [ fullcws aload pop ncws ] def} if
} forall
/numremcws [ 1558 {10000} repeat ] def
fullcws {numremcws exch 1 sub 1 put} forall
1556 -1 0 {
/i exch def
numremcws i get 1 ne {
numremcws i numremcws i 1 add get 1 add put
} if
} for
 
% Special characters
/lC -5 def /lB -6 def /lX -7 def /lT -8 def /lE -9 def /unl -10 def
/sapp -11 def /usft -12 def /sft1 -13 def /sft2 -14 def /sft3 -15 def /eci -16 def /pad -17 def
/unlcw 254 def
/Avals <<
0 1 128 {dup 1 add} for
pad 129
0 1 99 { % Double digits
dup 10 2 string cvrs (00) 2 string copy dup 2 3 index length sub 4 -1 roll putinterval
exch 130 add
} for
229 [ lC lB fnc1 sapp prog usft m05 m06 lX lT lE eci ] {exch 1 add dup} forall pop
>> def
/Avals <<
Avals {[exch]} forall
>> def
/CNvals <<
sft1 0
sft2 1
sft3 2
32 3
48 1 57 {dup 44 sub} for % 0-9
65 1 90 {dup 51 sub} for % A-Z
>> def
/C1vals << 0 1 31 {dup} for >> def
/C2vals <<
33 1 47 {dup 33 sub} for
58 1 64 {dup 43 sub} for
91 1 95 {dup 69 sub} for
fnc1 27
usft 30
>> def
/C3vals << 96 1 127 {dup 96 sub} for >> def
/Cvals <<
CNvals {[exch]} forall
C1vals {[exch CNvals sft1 get exch]} forall
C2vals {[exch CNvals sft2 get exch]} forall
C3vals {[exch CNvals sft3 get exch]} forall
>> def
/TNvals <<
sft1 0
sft2 1
sft3 2
32 3
48 1 57 {dup 44 sub} for % 0-9
97 1 122 {dup 83 sub} for % a-z
>> def
/T1vals << 0 1 31 {dup} for >> def
/T2vals <<
33 1 47 {dup 33 sub} for
58 1 64 {dup 43 sub} for
91 1 95 {dup 69 sub} for
fnc1 27
usft 30
>> def
/T3vals <<
96 0
65 1 90 {dup 64 sub} for
123 1 127 {dup 96 sub} for
>> def
/Tvals <<
TNvals {[exch]} forall
T1vals {[exch TNvals sft1 get exch]} forall
T2vals {[exch TNvals sft2 get exch]} forall
T3vals {[exch TNvals sft3 get exch]} forall
>> def
% Extended ASCII mappings
128 1 255 {
/i exch def
Avals i [ Avals usft get aload pop Avals i 128 sub get aload pop ] put
Cvals i [ Cvals usft get aload pop Cvals i 128 sub get aload pop ] put
Tvals i [ Tvals usft get aload pop Tvals i 128 sub get aload pop ] put
} for
/Xvals <<
13 0
42 1
62 2
32 3
48 1 57 {dup 44 sub} for
65 1 90 {dup 51 sub} for
>> def
/Xvals <<
Xvals {[exch]} forall
>> def
/Evals <<
64 1 94 {dup 64 sub} for
unl 31
32 1 63 {dup} for
>> def
/Evals <<
Evals {[exch]} forall
>> def
/Bvals <<
0 1 255 {dup} for
>> def
/Bvals <<
Bvals {[exch]} forall
>> def
/encvals [ Avals Cvals Tvals Xvals Evals Bvals ] def
/numD [ msglen {0} repeat 0 ] def
/nextXterm [ msglen {0} repeat 9999 ] def
/nextNonX [ msglen {0} repeat 9999 ] def
msglen 1 sub -1 0 {
/i exch def
/barchar msg i get def
barchar 48 ge barchar 57 le and {
numD i numD i 1 add get 1 add put
} if
barchar 13 eq barchar 42 eq or barchar 62 eq or {
nextXterm i 0 put
} {
nextXterm i nextXterm i 1 add get 1 add put
} ifelse
Xvals barchar known not {
nextNonX i 0 put
} {
nextNonX i nextNonX i 1 add get 1 add put
} ifelse
} for
/nextXterm [nextXterm {dup 10000 gt {pop 10000} if} forall] def
/nextNonX [nextNonX {dup 10000 gt {pop 10000} if} forall] def
/isD {char 48 ge char 57 le and} bind def
/isC {CNvals char known} bind def
/isT {TNvals char known} bind def
/isX {Xvals char known} bind def
/isE {Evals char known} bind def
/isEA {char 127 gt} bind def
/isFN {char 0 lt} bind def
/XtermFirst {dup nextXterm exch get exch nextNonX exch get lt} bind def
/A 0 def /C 1 def /T 2 def /X 3 def /E 4 def /B 5 def
 
/lookup {
/ac 1 def /cc 2 def /tc 2 def /xc 2 def /ec 2 def /bc 2.25 def
mode A eq {/ac 0 def /cc 1 def /tc 1 def /xc 1 def /ec 1 def /bc 1.25 def} if
mode C eq {/cc 0 def} if
mode T eq {/tc 0 def} if
mode X eq {/xc 0 def} if
mode E eq {/ec 0 def} if
mode B eq {/bc 0 def} if
1 { % common exit
/k 0 def { % loop
i k add msglen eq {
[/ac /cc /tc /xc /ec /bc] {dup load ceiling def} forall
true [ cc tc xc ec bc] {ac exch le and} forall {A exit} if
true [ac cc tc xc ec ] {bc exch lt and} forall {B exit} if
true [ac cc tc xc bc] {ec exch lt and} forall {E exit} if
true [ac cc xc ec bc] {tc exch lt and} forall {T exit} if
true [ac cc tc ec bc] {xc exch lt and} forall {X exit} if
C exit
} if
/char msg i k add get def
/ac ac isD {1 2 div add} {isEA {ceiling 2 add} {1 add } ifelse} ifelse def
/cc cc isC {2 3 div add} {isEA { 8 3 div add } { 4 3 div add} ifelse} ifelse def
/tc tc isT {2 3 div add} {isEA { 8 3 div add } { 4 3 div add} ifelse} ifelse def
/xc xc isX {2 3 div add} {isEA {13 3 div add } {10 3 div add} ifelse} ifelse def
/ec ec isE {3 4 div add} {isEA {17 4 div add } {13 4 div add} ifelse} ifelse def
/bc bc isFN {4 add} {1 add} ifelse def
k 4 ge {
true [ cc tc xc ec bc] {ac 1 add exch le and} forall {A exit} if
bc 1 add ac le {B exit} if
true [ cc tc xc ec ] {bc 1 add exch lt and} forall {B exit} if
true [ac cc tc xc bc] {ec 1 add exch lt and} forall {E exit} if
true [ac cc xc ec bc] {tc 1 add exch lt and} forall {T exit} if
true [ac cc tc ec bc] {xc 1 add exch lt and} forall {X exit} if
true [ac tc ec bc] {cc 1 add exch lt and} forall {
cc xc lt {C exit} if
cc xc eq {i k add 1 add XtermFirst {X exit} {C exit} ifelse} if
} if
} if
/k k 1 add def
} loop
} repeat
} bind def
/addtocws {
dup cws exch j exch putinterval
/j exch length j add def
} bind def
/encA {
1 { % Common exit
numD i get 2 ge {
2 string dup 0 msg i get put dup 1 msg i 1 add get put Avals exch get addtocws
/i i 2 add def
exit
} if
/newmode lookup def
newmode mode ne {
Avals [-1 lC lT lX lE lB] newmode get get addtocws
/mode newmode def
exit
} if
Avals msg i get get addtocws
/i i 1 add def
exit
} repeat
} bind def
/CTXvalstocws {
/in exch def
mark
0 3 in length 1 sub {
in exch 3 getinterval 0 exch {add 40 mul} forall 40 idiv 1 add
dup 256 idiv exch 256 mod
} for
counttomark array astore exch pop
} bind def
/encCTX {
/p 0 def
/ctxvals 2500 array def
% Lookup the values for each character
{
i msglen eq {exit} if
encvals mode get msg i get known not {exit} if
p 3 mod 0 eq {
lookup mode ne {
ctxvals 0 p getinterval CTXvalstocws addtocws
[unlcw] addtocws
/mode A def
exit
} if
msglen i sub 3 le { % Check end of data conditions
/remcws numremcws j p 3 idiv 2 mul add get def
/remvals [
msg i msglen i sub getinterval {
dup encvals mode get exch known {
encvals mode get exch get aload pop
} { % Unencodable X12 characters
pop -1 -1 -1 -1
} ifelse
} forall
] def
remcws 2 eq remvals length 3 eq and {
% Encode and omit unlatch
[
ctxvals 0 p getinterval aload pop
remvals aload pop
] CTXvalstocws addtocws
/mode A def
/i msglen def
exit
} if
remcws 2 eq remvals length 2 eq and mode X ne and {
% Encode with sft1 as third value, omit unlatch
[
ctxvals 0 p getinterval aload pop
remvals aload pop
encvals mode get sft1 get aload pop
] CTXvalstocws addtocws
/mode A def
/i msglen def
exit
} if
remcws 2 eq remvals length 1 eq and {
% Unlatch to ASCII
ctxvals 0 p getinterval CTXvalstocws addtocws
[unlcw] addtocws
Avals msg i get get addtocws
/mode A def
/i msglen def
exit
} if
remcws 1 eq remvals length 1 eq and {
% Implied unlatch to ASCII
ctxvals 0 p getinterval CTXvalstocws addtocws
Avals msg i get get addtocws
/mode A def
/i msglen def
exit
} if
} if
} if
encvals mode get msg i get get
dup ctxvals exch p exch putinterval
/p exch length p add def
/i i 1 add def
} loop
 
% Backtrack to a boundary and return to ASCII
mode A ne {
{
p 3 mod 0 eq {exit} if
/i i 1 sub def
/p p encvals mode get msg i get get length sub def
} loop
[
ctxvals 0 p getinterval aload pop
] CTXvalstocws addtocws
[unlcw] addtocws
/mode A def
% Encode something to avoid latching immediately back
i msglen ne {
numD i get 2 ge {
2 string dup 0 msg i get put dup 1 msg i 1 add get put Avals exch get addtocws
/i i 2 add def
} {
Avals msg i get get addtocws
/i i 1 add def
} ifelse
} if
} if
} bind def
/Evalstocws {
/in exch def
/inlen in length def
/outlen in length 4 div 3 mul ceiling cvi def
/in [ in aload pop 0 0 0 ] def
mark
0 4 inlen 1 sub {
in exch 4 getinterval 0 exch {or 6 bitshift} forall -6 bitshift
dup -16 bitshift 255 and exch
dup -8 bitshift 255 and exch
255 and
} for
counttomark array astore exch pop
0 outlen getinterval
} bind def
/encE {
/p 0 def
/edifactvals 2100 array def
% Lookup the values for each character
{
i msglen eq {exit} if
Evals msg i get known not {exit} if
p 4 mod 0 eq {
lookup mode ne {exit} if
msglen i sub 2 le { % Check end of data conditions
/remcws numremcws j p 4 idiv 3 mul add get def
/remvals [
msg i msglen i sub getinterval {
dup Evals exch known {
Evals exch get aload pop
} { % Unencodable EDIFACT characters
pop -1 -1 -1 -1 -1
} ifelse
} forall
] def
remcws 2 eq remvals length 2 eq and {
% Implied unlatch to ASCII
edifactvals 0 p getinterval Evalstocws addtocws
Avals msg i get get addtocws
Avals msg i 1 add get get addtocws
/mode A def
/i msglen def
exit
} if
remcws 2 eq remcws 1 eq or remvals length 1 eq and {
% Implied unlatch to ASCII
edifactvals 0 p getinterval Evalstocws addtocws
Avals msg i get get addtocws
/mode A def
/i msglen def
exit
} if
} if
} if
Evals msg i get get
dup edifactvals exch p exch putinterval
/p exch length p add def
/i i 1 add def
} loop
% Unlatch and pad with zeros until boundary
mode A ne {
/remcws numremcws j p 4 idiv 3 mul add 1 sub get 1 sub def
remcws 0 ne { % Unlatch if we haven't filled symbol
Evals unl get
dup edifactvals exch p exch putinterval
/p exch length p add def
} if
edifactvals 0 p getinterval Evalstocws addtocws
/mode A def
% Encode something to avoid latching immediately back
i msglen ne {
numD i get 2 ge {
2 string dup 0 msg i get put dup 1 msg i 1 add get put Avals exch get addtocws
/i i 2 add def
} {
Avals msg i get get addtocws
/i i 1 add def
} ifelse
} if
} if
 
} bind def
/encB {
/p 0 def /bvals 1558 array def {
i msglen eq {exit} if
lookup mode ne {exit} if
bvals p msg i get put
/p p 1 add def
/i i 1 add def
} loop
/remcws numremcws j p add get 1 sub def
/bvals [
remcws 0 eq i msglen eq and { % Terminates symbol
0
} {
p 250 lt {p} {p 250 idiv 249 add p 250 mod} ifelse
} ifelse
bvals 0 p getinterval aload pop
] def
0 1 bvals length 1 sub { % Pseudo-randomise based on codeword position
/p exch def
j p add 1 add 149 mul 255 mod 1 add bvals p get add
dup 256 ge {256 sub} if
bvals exch p exch put
} for
bvals addtocws
/mode A def
} bind def
% Derive the codewords
/cws 1558 array def
/mode A def /i 0 def /j 0 def {
i msglen ge {exit} if
[ /encA /encCTX /encCTX /encCTX /encE /encB ] mode get load exec
} loop
/cws cws 0 j getinterval def
 
% Extend cws to ncws codewords by addition of pseudo-randomised pad characters
cws length ncws lt {
/datlen cws length def
/cws [ cws {} forall ncws datlen sub {129} repeat ] def
datlen 1 add 1 ncws 1 sub {
% Extend codewords to fill symbol with pseudo-randomised pad characters
/datlen cws length def
/remcws numremcws j 1 sub get 1 sub def
remcws 0 gt {
/cws [ cws aload pop remcws {129} repeat ] def
datlen 1 add 1 datlen remcws add 1 sub {
/i exch def
i 1 add 149 mul 253 mod 1 add 129 add
dup 254 gt {254 sub} if
12437,6 → 14801,28
} for
} if
 
% Lookup symbol metrics based on number of codewords and user specification
/i 0 def { % loop
/m metrics i get def
/rows m 0 get def % Rows in symbol
/cols m 1 get def % Columns in symbol
/regh m 2 get def % Horizontal regions
/regv m 3 get def % Vertical regions
/rscw m 4 get def % Error correction codewords
/rsbl m 5 get def % Error correction blocks
/mrows rows 2 regh mul sub def % Rows in the mapping matrix
/mcols cols 2 regv mul sub def % Columns in the mapping matrix
/rrows mrows regh idiv def % Rows per region
/rcols mcols regv idiv def % Columns per region
/ncws mrows mcols mul 8 idiv rscw sub def % Data codewords
/okay true def
cws length ncws ne {/okay false def} if
urows 0 ne urows rows ne and {/okay false def} if
ucols 0 ne ucols cols ne and {/okay false def} if
okay {exit} if
/i i 1 add def
} loop
 
% De-interleave the codewords into blocks
/cwbs rsbl array def % Array of data codeword blocks
/ecbs rsbl array def % Array of error correction blocks
12659,15 → 15045,21
/datamatrix dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER datamatrix--
 
% --BEGIN ENCODER qrcode--
% --REQUIRES preamble raiseerror renmatrix--
% --DESC: QR Code
% --EXAM: http://www.terryburton.co.uk/barcodewriter/
% --EXAM: http://goo.gl/0bis
% --EXOP: eclevel=M
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp qrcode 0.0 2014121100 261342 297027
%%BeginData: 1004 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/qrcode {
12678,12 → 15070,11
/barcode exch def
 
/dontdraw false def
/format (full) def % full or micro
/version (unset) def
/format (full) def % full or micro or any
/version (unset) def % 1-40 or M1-M4
/eclevel (unset) def % L, M, Q or H
/encoding (unset) def
/raw false def
/parse false def
/parsefnc false def
 
% Parse the input options
options type /stringtype eq {
12719,353 → 15110,420
 
/barlen barcode length def
 
% Convert input into bytes accounting for FNC characters
/fn1 -1 def
/fncvals <<
(FNC1) fn1
>> def
/msg barlen array def
/i 0 def /j 0 def {
i barlen eq {exit} if
/char barcode i get def
parsefnc char 94 eq and i barlen 4 sub lt and {
barcode i 1 add get 94 ne {
/char fncvals barcode i 1 add 4 getinterval get def
/i i 4 add def
} {
/i i 1 add def
} ifelse
} if
msg j char put
/i i 1 add def
/j j 1 add def
} loop
/msg msg 0 j getinterval def
/msglen msg length def
 
% If FNC1 in first position then escape % as %%
/fnc1first false def
msglen 0 gt {
msg 0 get fn1 eq {
/fnc1first true def
/msg [ msg 1 msglen 1 sub getinterval { dup 37 eq {dup} if } forall ] def
/msglen msg length def
} if
} if
 
% Default error correction level
eclevel (unset) eq {/eclevel format (full) eq {(M)} {(L)} ifelse def} if
 
% Convert from input into message bitstream
raw {/encoding (raw) def} if
encoding (raw) eq {
/msgbits barcode def
} {
/N 0 def /A 1 def /B 2 def /K 3 def
/Nexcl <<
[
16#30 1 16#39 {} for
] {-1} forall
>> def
/Aexcl <<
[
16#20 16#24 16#25 16#2A 16#2B 16#2D 16#2E 16#2F 16#3A
16#41 1 16#5A {} for
] {-1} forall
>> def
/Bexcl <<
[
16#00 1 16#1F {} for
16#21 16#22 16#23 16#26 16#27 16#28 16#29 16#2C
16#3B 1 16#40 {} for
16#5B 1 16#7F {} for
16#A0 1 16#DF {} for
] {-1} forall
>> def
/Kexcl <<
[
16#81 1 16#9F {} for
16#E0 1 16#EB {} for
] {-1} forall
>> def
/mids [ % N A B K
[ (0001) (0010) (0100) (1000) ] % 1-9
[ (0001) (0010) (0100) (1000) ] % 10-26
[ (0001) (0010) (0100) (1000) ] % 27-40
[ () -1 -1 -1 ] % M1
[ (0) (1) -1 -1 ] % M2
[ (00) (01) (10) (11) ] % M3
[ (000) (001) (010) (011) ] % M4
] def
/cclens [ % N A B K
[ 10 9 8 8 ] % 1-9
[ 12 11 16 10 ] % 10-26
[ 14 13 16 12 ] % 27-40
[ 3 -1 -1 -1 ] % M1
[ 4 3 -1 -1 ] % M2
[ 5 4 4 3 ] % M3
[ 6 5 5 4 ] % M4
] def
/termlens [ 4 4 4 3 5 7 9 ] def
% Encoding functions
/tobin {
string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for
dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
} bind def
 
% Symbol capacities
/fullcaps <<
/numeric <<
/L [ 41 77 127 187 255 322 370 461 552 652 % 1-L - 10-L
772 883 1022 1101 1250 1408 1548 1725 1903 2061 % 11-L - 20-L
2232 2409 2620 2812 3057 3283 3517 3669 3909 4158 % 21-L - 30-L
4417 4686 4965 5253 5529 5836 6153 6479 6743 7089 ] % 31-L - 40-L
/M [ 34 63 101 149 202 255 293 365 432 513 % 1-M - 10-M
604 691 796 871 991 1082 1212 1346 1500 1600 % 11-M - 20-M
1708 1872 2059 2188 2395 2544 2701 2857 3035 3289 % 21-M - 30-M
3486 3693 3909 4134 4343 4588 4775 5039 5313 5596 ] % 31-M - 40-M
/Q [ 27 48 77 111 144 178 207 259 312 364 % 1-Q - 10-Q
427 489 580 621 703 775 876 948 1063 1159 % 11-Q - 20-Q
1224 1358 1468 1588 1718 1804 1933 2085 2181 2358 % 21-Q - 30-Q
2473 2670 2805 2949 3081 3244 3417 3599 3791 3993 ] % 31-Q - 40-Q
/H [ 17 34 58 82 106 139 154 202 235 288 % 1-H - 10-H
331 374 427 468 530 602 674 746 813 919 % 11-H - 20-H
969 1056 1108 1228 1286 1425 1501 1581 1677 1782 % 21-H - 30-H
1897 2022 2157 2301 2361 2524 2625 2735 2927 3057 ] % 31-H - 40-H
>>
/alphanumeric <<
/L [ 25 47 77 114 154 195 224 279 335 395 % 1-L - 10-L
468 535 619 667 758 854 938 1046 1153 1249 % 11-L - 20-L
1352 1460 1588 1704 1853 1990 2132 2223 2369 2520 % 21-L - 30-L
2677 2840 3009 3183 3351 3537 3729 3927 4087 4296 ] % 31-L - 40-L
/M [ 20 38 61 90 122 154 178 221 262 311 % 1-M - 10-M
366 419 483 528 600 656 734 816 909 970 % 11-M - 20-M
1035 1134 1248 1326 1451 1542 1637 1732 1839 1994 % 21-M - 30-M
2113 2238 2369 2506 2632 2780 2894 3054 3220 3391 ] % 31-M - 40-M
/Q [ 16 29 47 67 87 108 125 157 189 221 % 1-Q - 10-Q
259 296 352 376 426 470 531 574 644 702 % 11-Q - 20-Q
742 823 890 963 1041 1094 1172 1263 1322 1429 % 21-Q - 30-Q
1499 1618 1700 1787 1867 1966 2071 2181 2298 2420 ] % 31-Q - 40-Q
/H [ 10 20 35 50 64 84 93 122 143 174 % 1-H - 10-H
200 227 259 283 321 365 408 452 493 557 % 11-H - 20-H
587 640 672 744 779 864 910 958 1016 1080 % 21-H - 30-H
1150 1226 1307 1394 1431 1530 1591 1658 1774 1852 ] % 31-H - 40-H
>>
/byte <<
/L [ 17 32 53 78 106 134 154 192 230 271 % 1-L - 10-L
321 367 425 458 520 586 644 718 792 858 % 11-L - 20-L
929 1003 1091 1171 1273 1367 1465 1528 1628 1732 % 21-L - 30-L
1840 1952 2068 2188 2303 2431 2563 2699 2809 2953 ] % 31-L - 40-L
/M [ 14 26 42 62 84 106 122 152 180 213 % 1-M - 10-M
251 287 331 362 412 450 504 560 624 666 % 11-M - 20-M
711 779 857 911 997 1059 1125 1190 1264 1370 % 21-M - 30-M
1452 1538 1628 1722 1809 1911 1989 2099 2213 2331 ] % 31-M - 40-M
/Q [ 11 20 32 46 60 74 86 108 130 151 % 1-Q - 10-Q
177 203 241 258 292 322 364 394 442 482 % 11-Q - 20-Q
509 565 611 661 715 751 805 868 908 982 % 21-Q - 30-Q
1030 1112 1168 1228 1283 1351 1423 1499 1579 1663 ] % 31-Q - 40-Q
/H [ 7 14 24 34 44 58 64 84 98 119 % 1-H - 10-H
137 155 177 194 220 250 280 310 338 382 % 11-H - 20-H
403 439 461 511 535 593 625 658 698 742 % 21-H - 30-H
790 842 898 958 983 1051 1093 1139 1219 1273 ] % 31-H - 40-H
>>
/kanji <<
/L [ 10 20 32 48 65 82 95 118 141 167 % 1-L - 10-L
198 226 262 282 320 361 397 442 488 528 % 11-L - 20-L
572 618 672 721 784 842 902 940 1002 1066 % 21-L - 30-L
1132 1201 1273 1347 1417 1496 1577 1661 1729 1817 ] % 31-L - 40-L
/M [ 8 16 26 38 52 65 75 93 111 131 % 1-M - 10-M
155 177 204 223 254 277 310 345 384 410 % 11-M - 20-M
438 480 528 561 614 652 692 732 778 843 % 21-M - 30-M
894 947 1002 1060 1113 1176 1224 1292 1362 1435 ] % 31-M - 40-M
/Q [ 7 12 20 28 37 45 53 66 80 93 % 1-Q - 10-Q
109 125 149 159 180 198 224 243 272 297 % 11-Q - 20-Q
314 348 376 407 440 462 496 534 559 604 % 21-Q - 30-Q
634 684 719 756 790 832 876 923 972 1024 ] % 31-Q - 40-Q
/H [ 4 8 15 21 27 36 39 52 60 74 % 1-H - 10-H
85 96 109 120 136 154 173 191 208 235 % 11-H - 20-H
248 270 284 315 330 365 385 405 430 457 % 21-H - 30-H
486 518 553 590 605 647 673 701 750 784 ] % 31-H - 40-H
>>
>> def
% Alphanumeric character to value map
/charmap (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:) def
/charvals 44 dict def
0 1 44 {dup charmap exch get exch charvals 3 1 roll put} for
 
% M1 M2 M3 M4 M1 M2 M3 M4 M1 M2 M3 M4 M1 M2 M3 M4
/microcaps <<
/numeric <<
/L [ 5 10 23 35 ] /M [ -1 8 18 30 ] /Q [ -1 -1 -1 21 ] /H [ -1 -1 -1 -1 ]
>>
/alphanumeric <<
/L [ -1 6 14 21 ] /M [ -1 5 11 18 ] /Q [ -1 -1 -1 13 ] /H [ -1 -1 -1 -1 ]
>>
/byte <<
/L [ -1 -1 9 15 ] /M [ -1 -1 7 13 ] /Q [ -1 -1 -1 9 ] /H [ -1 -1 -1 -1 ]
>>
/kanji <<
/L [ -1 -1 6 9 ] /M [ -1 -1 4 8 ] /Q [ -1 -1 -1 5 ] /H [ -1 -1 -1 -1 ]
>>
>> def
 
/encvals <<
/numeric 0
/alphanumeric 1
/byte 2
/kanji 3
>> def
 
/encs <<
/numeric /encnumeric
/alphanumeric /encalphanumeric
/byte /encbyte
/kanji /enckanji
>> def
 
% N A B K
/mids [ (0001) (0010) (0100) (1000) ] def
/mids <<
/M1 [ () -1 -1 -1 ]
/M2 [ (0) (1) -1 -1 ]
/M3 [ (00) (01) (10) (11) ]
/M4 [ (000) (001) (010) (011) ]
1 1 40 {2 string 10 exch cvrs mids} for
>> def
 
% N A B K
/cc1to9 [ 10 9 8 8 ] def
/cc10to26 [ 12 11 16 10 ] def
/cc27to40 [ 14 13 16 12 ] def
/cclens <<
/M1 [ 3 -1 -1 -1 ]
/M2 [ 4 3 -1 -1 ]
/M3 [ 5 4 4 3 ]
/M4 [ 6 5 5 4 ]
1 1 9 { 2 string 10 exch cvrs cc1to9 } for
10 1 26 { 2 string 10 exch cvrs cc10to26 } for
27 1 40 { 2 string 10 exch cvrs cc27to40 } for
>> def
 
% Alphanumeric character to value map
/charmap (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:) def
/charvals 44 dict def
0 1 44 {dup charmap exch get exch charvals 3 1 roll put} for
 
/encnumeric {
/in exch def
/out in length 10 mul 3 idiv 1 add string def
/i 0 def /j 0 def {
i in length eq {exit} if
i in length 2 sub lt {
(0000000000) 10 string copy
dup in i 3 getinterval cvi
2 10 string cvrs dup length 10 exch sub exch putinterval
/i i 3 add def
} {
i in length 2 sub eq { % Two final digits
(0000000) 7 string copy
dup in i 2 getinterval cvi
2 7 string cvrs dup length 7 exch sub exch putinterval
/i i 2 add def
} { % One final digit
(0000) 4 string copy
dup in i 1 getinterval cvi
2 4 string cvrs dup length 4 exch sub exch putinterval
/i i 1 add def
} ifelse
/encA {
/in exch def
fnc1first { % FNC1 as %
/in [ in { dup -1 eq {pop 37} if } forall ] def
} if
/out in length 11 mul 2 idiv 1 add string def
/k 0 def /m 0 def {
k in length eq {exit} if
k in length 1 sub lt {
charvals in k get get 45 mul charvals in k 1 add get get add 11 tobin
/k k 2 add def
} { % Final character
charvals in k get get 6 tobin
/k k 1 add def
} ifelse
dup out exch m exch putinterval
length m add /m exch def
} loop
out 0 m getinterval
} bind def
/encN {
/in exch def
/out in length 10 mul 3 idiv 1 add string def
/k 0 def /m 0 def {
k in length eq {exit} if
k in length 2 sub lt {
in k 3 getinterval 0 exch {exch 10 mul 48 sub add} forall 10 tobin
/k k 3 add def
} {
k in length 2 sub eq { % Two final digits
in k 2 getinterval 0 exch {exch 10 mul 48 sub add} forall 7 tobin
/k k 2 add def
} { % One final digit
in k 1 getinterval 0 exch {exch 10 mul 48 sub add} forall 4 tobin
/k k 1 add def
} ifelse
dup out exch j exch putinterval
length j add /j exch def
} loop
out 0 j getinterval
} bind def
} ifelse
dup out exch m exch putinterval
length m add /m exch def
} loop
out 0 m getinterval
} bind def
/encB {
/in exch def
fnc1first { % FNC1 as GS
/in [ in { dup -1 eq {pop 29} if } forall ] def
} if
/out in length 8 mul string def
0 1 in length 1 sub {
/k exch def
in k get cvi 8 tobin
out k 8 mul 3 -1 roll putinterval
} for
out
} bind def
/encK {
/in exch def
/out in length 2 idiv 13 mul string def
/k 0 def /m 0 def {
k in length eq {exit} if
in k get 256 mul in k 1 add get add
dup 16#E040 lt {16#8140} {16#C140} ifelse sub
dup -8 bitshift 16#C0 mul exch 16#00FF and add
13 tobin dup out exch m exch putinterval
length m add /m exch def
/k k 2 add def
} loop
out
} bind def
/encfuncs [ /encN /encA /encB /encK ] def
/addtobits {
dup bits j 3 -1 roll putinterval
length j add /j exch def
} bind def
/numNs [ msglen {0} repeat 0 ] def
/numAs [ msglen {0} repeat 0 ] def
/numBs [ msglen {0} repeat 0 ] def
/numKs [ msglen {0} repeat -1 ] def
/nextNs [ msglen {0} repeat 9999 ] def
/nextBs [ msglen {0} repeat 9999 ] def
/nextAs [ msglen {0} repeat 9999 ] def
/nextKs [ msglen {0} repeat 9999 ] def
msglen 1 sub -1 0 {
/i exch def
/barchar msg i get def
Kexcl barchar known {
nextKs i 0 put
numKs i numKs i 1 add get 1 add put
} {
nextKs i nextKs i 1 add get 1 add put
} ifelse
Nexcl barchar known {
nextNs i 0 put
numNs i numNs i 1 add get 1 add put
} {
nextNs i nextNs i 1 add get 1 add put
} ifelse
Bexcl barchar known {
nextBs i 0 put
numBs i numBs i 1 add get 1 add put
} {
nextBs i nextBs i 1 add get 1 add put
} ifelse
Aexcl barchar known {
nextAs i 0 put
numAs i numAs i 1 add get 1 add put
} {
nextAs i nextAs i 1 add get 1 add put
} ifelse
} for
/numKs [ numKs {1 add 2 idiv} forall ] def
/KbeforeB {numK exch ver get ge nextBs numK 2 mul i add get 0 eq and} bind def
/KbeforeA {numK exch ver get ge nextAs numK 2 mul i add get 0 eq and} bind def
/KbeforeN {numK exch ver get ge nextNs numK 2 mul i add get 0 eq and} bind def
/KbeforeE {numK exch ver get ge numK 2 mul i add msglen eq and} bind def
/AbeforeK {numA exch ver get ge nextKs numA i add get 0 eq and} bind def
/AbeforeB {numA exch ver get ge nextBs numA i add get 0 eq and} bind def
/AbeforeN {numA exch ver get ge nextNs numA i add get 0 eq and} bind def
/AbeforeE {numA exch ver get ge numA i add msglen eq and} bind def
/NbeforeK {numN exch ver get ge nextKs numN i add get 0 eq and} bind def
/NbeforeB {numN exch ver get ge nextBs numN i add get 0 eq and} bind def
/NbeforeA {numN exch ver get ge nextAs numN i add get 0 eq and} bind def
/NbeforeE {numN exch ver get ge numN i add msglen eq and} bind def
 
/encalphanumeric {
/in exch def
/out in length 11 mul 2 idiv 1 add string def
/i 0 def /j 0 def {
i in length eq {exit} if
i in length 1 sub lt {
(00000000000) 11 string copy
dup charvals in i get get 45 mul charvals in i 1 add get get add
2 11 string cvrs dup length 11 exch sub exch putinterval
/i i 2 add def
} {
(000000) 6 string copy
dup charvals in i get get
2 6 string cvrs dup length 6 exch sub exch putinterval
/i i 1 add def
} ifelse
dup out exch j exch putinterval
length j add /j exch def
% Encode unterminated bitsream for each version group separately
/msgbits [-1 -1 -1 -1 -1 -1 -1] def
/v1to9 0 def /v10to26 1 def /v27to40 2 def /vM1 3 def /vM2 4 def /vM3 5 def /vM4 6 def
/e 10000 def
[v1to9 v10to26 v27to40 vM1 vM2 vM3 vM4] {
/ver exch def
% Derive optimal sequence
/mode -1 def /seq [] def /i 0 def {
i msglen ge {exit} if
/numK numKs i get def
/numB numBs i get def
/numA numAs i get def
/numN numNs i get def
ver vM1 eq numA 1 ge and {/seq -1 def exit} if
ver vM1 eq numB 1 ge and {/seq -1 def exit} if
ver vM1 eq numK 1 ge and {/seq -1 def exit} if
ver vM2 eq numB 1 ge and {/seq -1 def exit} if
ver vM2 eq numK 1 ge and {/seq -1 def exit} if
{ % common exit
mode -1 eq { % Set initial mode
[ 1 1 1 e e 1 1] KbeforeA {K exit} if
[ 1 1 1 e e 1 1] KbeforeN {K exit} if
[ 5 5 6 e e 2 3] KbeforeB {K exit} if
[ 1 1 1 e e 1 1] KbeforeE {K exit} if
numK 1 ge {B exit} if
[ 6 7 8 e e 3 4] AbeforeB {A exit} if
[ 1 1 1 e 1 1 1] AbeforeE {A exit} if
numA 1 ge {
ver vM1 ne ver vM2 ne and {B} {A} ifelse exit
} if
[ 4 4 5 e e 2 3] NbeforeB {N exit} if
[ 1 1 1 e e 1 1] NbeforeB {B exit} if
[ 7 8 9 e 3 4 5] NbeforeA {N exit} if
[ 1 1 1 e 1 1 1] NbeforeA {A exit} if
numN 1 ge {N exit} if
B exit
} if
mode B eq {
[ 9 12 13 e e 4 5] KbeforeB {K exit} if
[ 9 10 12 e e 4 5] KbeforeA {K exit} if
[ 9 10 11 e e 5 6] KbeforeN {K exit} if
[ 4 5 6 e e 2 3] KbeforeE {K exit} if
[11 12 14 e e 5 7] AbeforeK {A exit} if
[11 15 16 e e 6 7] AbeforeB {A exit} if
[12 13 15 e e 6 8] AbeforeN {A exit} if
[ 6 7 8 e e 3 4] AbeforeE {A exit} if
[ 6 7 8 e e 3 4] NbeforeK {N exit} if
[ 6 8 9 e e 3 4] NbeforeB {N exit} if
[ 6 7 8 e e 3 4] NbeforeA {N exit} if
[ 3 4 5 e e 2 3] NbeforeE {N exit} if
B exit
} if
mode A eq {
numK 1 ge {K exit} if
numB 1 ge {B exit} if
[13 15 17 e 5 7 9] NbeforeA {N exit} if
[13 17 18 e e 7 9] NbeforeB {N exit} if
[ 7 8 9 e 3 4 5] NbeforeE {N exit} if
A exit
} if
mode N eq {
numK 1 ge {K exit} if
numB 1 ge {B exit} if
numA 1 ge {A exit} if
N exit
} if
mode K eq {
numB 1 ge {B exit} if
numA 1 ge {A exit} if
numN 1 ge {N exit} if
K exit
} if
} loop
out 0 j getinterval
} bind def
dup K eq fnc1first and {pop B} if % No kanji with fnc1first
dup mode eq { % Same mode encode directly
pop
/dat msg i mode K eq {2} {1} ifelse getinterval def
/seq [
seq aload pop
[ exch aload pop dat aload pop ]
] def
} { % Change mode
/mode exch def
mode K eq {K msg i numK 2 mul getinterval} if
mode B eq {B msg i numB getinterval} if
mode A eq {A msg i numA getinterval} if
mode N eq {N msg i numN getinterval} if
/dat exch def /sw exch def
/seq [ seq aload pop sw dat ] def
} ifelse
/i i dat length add def
} loop
 
/encbyte {
/in exch def
/out in length 8 mul string def
0 1 in length 1 sub {
% Encode the sequence
{ % common exit
seq -1 eq {exit} if % Sequence not available
/bits 23648 string def
/j 0 def
fnc1first {(0101) addtobits} if
/abort false def
0 2 seq length 1 sub {
/i exch def
(00000000) 8 string copy
dup in i get cvi
2 8 string cvrs dup length 8 exch sub exch putinterval
out i 8 mul 3 -1 roll putinterval
} for
out
} bind def
 
/enckanji {
/in exch def
/out in length 2 idiv 13 mul string def
/i 0 def /j 0 def {
i in length eq {exit} if
in i get 256 mul in i 1 add get add
dup 16#E040 lt {16#8140} {16#C140} ifelse sub
dup -8 bitshift 16#C0 mul exch 16#00FF and add
(0000000000000) 13 string copy
dup 3 -1 roll 2 13 string cvrs dup length 13 exch sub exch putinterval
dup out exch j exch putinterval
length j add /j exch def
/i i 2 add def
} loop
out
} bind def
 
% Determine a compact encoding for the data
encoding (unset) eq {
/numericokay true def
/alphanumericokay true def
/kanjiokay true def
/byteokay true def
barlen 2 mod 0 ne {/kanjiokay false def} if
0 1 barlen 1 sub {
/i exch def
/barchar barcode i get def
barchar 48 lt barchar 57 gt or {/numericokay false def} if
charvals barchar known not {/alphanumericokay false def} if
i 2 mod 0 eq {
barchar 16#81 lt barchar 16#9F gt or
barchar 16#E0 lt barchar 16#EB gt or and {
/kanjiokay false def
} if
/mode seq i get def
mids ver get mode get addtobits
/cclen cclens ver get mode get def
/chars seq i 1 add get def
chars length 2 cclen exp cvi ge { % Too many characters for cc indicator
/abort true def exit
} if
chars length mode K eq {2 idiv} if cclen tobin addtobits
chars encfuncs mode get load exec addtobits
} for
byteokay {/encoding (byte) def} if
kanjiokay {/encoding (kanji) def} if
alphanumericokay {/encoding (alphanumeric) def} if
numericokay {/encoding (numeric) def} if
} if
abort {exit} if
/bits bits 0 j getinterval def
msgbits ver bits put
exit
} loop
} forall
 
% Determine smallest symbol version to hold given amount of data
/numchars barlen encoding (kanji) eq {2 idiv} if def
version (unset) eq {
/caps format (full) eq {fullcaps} {microcaps} ifelse encoding get eclevel get def
/i 1 def {
numchars caps i 1 sub get le {exit} if
/i i 1 add def
} loop
/version i 10 2 string cvrs def
format (micro) eq {
/version (M ) 2 string copy dup version 1 exch putinterval def
} if
} if
 
% Opportunistically raise the error correction level for a fit to the same symbol
/caps format (full) eq {fullcaps} {microcaps} ifelse encoding get def
/verval format (full) eq {version cvi 1 sub} {version 1 get 49 sub} ifelse def
eclevel (L) eq {numchars caps /M get verval get le {/eclevel (M) def} if} if
eclevel (M) eq {numchars caps /Q get verval get le {/eclevel (Q) def} if} if
eclevel (Q) eq {numchars caps /H get verval get le {/eclevel (H) def} if} if
 
% Set the control character data for the version
/mid mids version get encvals encoding get get def
/cclen cclens version get encvals encoding get get def
% Create the bitstream as mode_id character_count encoded_data
/enc barcode encs encoding get load exec def
(0000000000000000) 0 cclen getinterval cclen string copy
dup barlen encoding (kanji) eq {2 idiv} if cvi
2 cclen string cvrs dup length cclen exch sub exch putinterval
/cc exch def
/msgbits mid length cclen add enc length add string def
msgbits 0 mid putinterval
msgbits mid length cc putinterval
msgbits mid length cclen add enc putinterval
 
} ifelse
 
% Lookup the most appropriate symbol specification
/metrics [
% format vers size align modules error codewords error correction blocks
% L M Q H L1 L2 M1 M2 Q1 Q2 H1 H2
[ (micro) (M1) 11 98 99 36 [ 2 99 99 99 ] [ 1 0 -1 -1 -1 -1 -1 -1 ] ]
[ (micro) (M2) 13 98 99 80 [ 5 6 99 99 ] [ 1 0 1 0 -1 -1 -1 -1 ] ]
[ (micro) (M3) 15 98 99 132 [ 6 8 99 99 ] [ 1 0 1 0 -1 -1 -1 -1 ] ]
[ (micro) (M4) 17 98 99 192 [ 8 10 14 99 ] [ 1 0 1 0 1 0 -1 -1 ] ]
[ (full) (1) 21 98 99 208 [ 7 10 13 17 ] [ 1 0 1 0 1 0 1 0 ] ]
[ (full) (2) 25 18 99 359 [ 10 16 22 28 ] [ 1 0 1 0 1 0 1 0 ] ]
[ (full) (3) 29 22 99 567 [ 15 26 36 44 ] [ 1 0 1 0 2 0 2 0 ] ]
[ (full) (4) 33 26 99 807 [ 20 36 52 64 ] [ 1 0 2 0 2 0 4 0 ] ]
[ (full) (5) 37 30 99 1079 [ 26 48 72 88 ] [ 1 0 2 0 2 2 2 2 ] ]
[ (full) (6) 41 34 99 1383 [ 36 64 96 112 ] [ 2 0 4 0 4 0 4 0 ] ]
[ (full) (7) 45 22 38 1568 [ 40 72 108 130 ] [ 2 0 4 0 2 4 4 1 ] ]
[ (full) (8) 49 24 42 1936 [ 48 88 132 156 ] [ 2 0 2 2 4 2 4 2 ] ]
[ (full) (9) 53 26 46 2336 [ 60 110 160 192 ] [ 2 0 3 2 4 4 4 4 ] ]
[ (full) (10) 57 28 50 2768 [ 72 130 192 224 ] [ 2 2 4 1 6 2 6 2 ] ]
[ (full) (11) 61 30 54 3232 [ 80 150 224 264 ] [ 4 0 1 4 4 4 3 8 ] ]
[ (full) (12) 65 32 58 3728 [ 96 176 260 308 ] [ 2 2 6 2 4 6 7 4 ] ]
[ (full) (13) 69 34 62 4256 [ 104 198 288 352 ] [ 4 0 8 1 8 4 12 4 ] ]
[ (full) (14) 73 26 46 4651 [ 120 216 320 384 ] [ 3 1 4 5 11 5 11 5 ] ]
[ (full) (15) 77 26 48 5243 [ 132 240 360 432 ] [ 5 1 5 5 5 7 11 7 ] ]
[ (full) (16) 81 26 50 5867 [ 144 280 408 480 ] [ 5 1 7 3 15 2 3 13 ] ]
[ (full) (17) 85 30 54 6523 [ 168 308 448 532 ] [ 1 5 10 1 1 15 2 17 ] ]
[ (full) (18) 89 30 56 7211 [ 180 338 504 588 ] [ 5 1 9 4 17 1 2 19 ] ]
[ (full) (19) 93 30 58 7931 [ 196 364 546 650 ] [ 3 4 3 11 17 4 9 16 ] ]
[ (full) (20) 97 34 62 8683 [ 224 416 600 700 ] [ 3 5 3 13 15 5 15 10 ] ]
[ (full) (21) 101 28 50 9252 [ 224 442 644 750 ] [ 4 4 17 0 17 6 19 6 ] ]
[ (full) (22) 105 26 50 10068 [ 252 476 690 816 ] [ 2 7 17 0 7 16 34 0 ] ]
[ (full) (23) 109 30 54 10916 [ 270 504 750 900 ] [ 4 5 4 14 11 14 16 14 ] ]
[ (full) (24) 113 28 54 11796 [ 300 560 810 960 ] [ 6 4 6 14 11 16 30 2 ] ]
[ (full) (25) 117 32 58 12708 [ 312 588 870 1050 ] [ 8 4 8 13 7 22 22 13 ] ]
[ (full) (26) 121 30 58 13652 [ 336 644 952 1110 ] [ 10 2 19 4 28 6 33 4 ] ]
[ (full) (27) 125 34 62 14628 [ 360 700 1020 1200 ] [ 8 4 22 3 8 26 12 28 ] ]
[ (full) (28) 129 26 50 15371 [ 390 728 1050 1260 ] [ 3 10 3 23 4 31 11 31 ] ]
[ (full) (29) 133 30 54 16411 [ 420 784 1140 1350 ] [ 7 7 21 7 1 37 19 26 ] ]
[ (full) (30) 137 26 52 17483 [ 450 812 1200 1440 ] [ 5 10 19 10 15 25 23 25 ] ]
[ (full) (31) 141 30 56 18587 [ 480 868 1290 1530 ] [ 13 3 2 29 42 1 23 28 ] ]
[ (full) (32) 145 34 60 19723 [ 510 924 1350 1620 ] [ 17 0 10 23 10 35 19 35 ] ]
[ (full) (33) 149 30 58 20891 [ 540 980 1440 1710 ] [ 17 1 14 21 29 19 11 46 ] ]
[ (full) (34) 153 34 62 22091 [ 570 1036 1530 1800 ] [ 13 6 14 23 44 7 59 1 ] ]
[ (full) (35) 157 30 54 23008 [ 570 1064 1590 1890 ] [ 12 7 12 26 39 14 22 41 ] ]
[ (full) (36) 161 24 50 24272 [ 600 1120 1680 1980 ] [ 6 14 6 34 46 10 2 64 ] ]
[ (full) (37) 165 28 54 25568 [ 630 1204 1770 2100 ] [ 17 4 29 14 49 10 24 46 ] ]
[ (full) (38) 169 32 58 26896 [ 660 1260 1860 2220 ] [ 4 18 13 32 48 14 42 32 ] ]
[ (full) (39) 173 26 54 28256 [ 720 1316 1950 2310 ] [ 20 4 40 7 43 22 10 67 ] ]
[ (full) (40) 177 30 58 29648 [ 750 1372 2040 2430 ] [ 19 6 18 31 34 34 20 61 ] ]
% format vers vergrp size align modules error codewords error correction blocks
% L M Q H L1 L2 M1 M2 Q1 Q2 H1 H2
[ (micro) (M1) vM1 11 98 99 36 [ 2 99 99 99 ] [ 1 0 -1 -1 -1 -1 -1 -1 ] ]
[ (micro) (M2) vM2 13 98 99 80 [ 5 6 99 99 ] [ 1 0 1 0 -1 -1 -1 -1 ] ]
[ (micro) (M3) vM3 15 98 99 132 [ 6 8 99 99 ] [ 1 0 1 0 -1 -1 -1 -1 ] ]
[ (micro) (M4) vM4 17 98 99 192 [ 8 10 14 99 ] [ 1 0 1 0 1 0 -1 -1 ] ]
[ (full) (1) v1to9 21 98 99 208 [ 7 10 13 17 ] [ 1 0 1 0 1 0 1 0 ] ]
[ (full) (2) v1to9 25 18 99 359 [ 10 16 22 28 ] [ 1 0 1 0 1 0 1 0 ] ]
[ (full) (3) v1to9 29 22 99 567 [ 15 26 36 44 ] [ 1 0 1 0 2 0 2 0 ] ]
[ (full) (4) v1to9 33 26 99 807 [ 20 36 52 64 ] [ 1 0 2 0 2 0 4 0 ] ]
[ (full) (5) v1to9 37 30 99 1079 [ 26 48 72 88 ] [ 1 0 2 0 2 2 2 2 ] ]
[ (full) (6) v1to9 41 34 99 1383 [ 36 64 96 112 ] [ 2 0 4 0 4 0 4 0 ] ]
[ (full) (7) v1to9 45 22 38 1568 [ 40 72 108 130 ] [ 2 0 4 0 2 4 4 1 ] ]
[ (full) (8) v1to9 49 24 42 1936 [ 48 88 132 156 ] [ 2 0 2 2 4 2 4 2 ] ]
[ (full) (9) v1to9 53 26 46 2336 [ 60 110 160 192 ] [ 2 0 3 2 4 4 4 4 ] ]
[ (full) (10) v10to26 57 28 50 2768 [ 72 130 192 224 ] [ 2 2 4 1 6 2 6 2 ] ]
[ (full) (11) v10to26 61 30 54 3232 [ 80 150 224 264 ] [ 4 0 1 4 4 4 3 8 ] ]
[ (full) (12) v10to26 65 32 58 3728 [ 96 176 260 308 ] [ 2 2 6 2 4 6 7 4 ] ]
[ (full) (13) v10to26 69 34 62 4256 [ 104 198 288 352 ] [ 4 0 8 1 8 4 12 4 ] ]
[ (full) (14) v10to26 73 26 46 4651 [ 120 216 320 384 ] [ 3 1 4 5 11 5 11 5 ] ]
[ (full) (15) v10to26 77 26 48 5243 [ 132 240 360 432 ] [ 5 1 5 5 5 7 11 7 ] ]
[ (full) (16) v10to26 81 26 50 5867 [ 144 280 408 480 ] [ 5 1 7 3 15 2 3 13 ] ]
[ (full) (17) v10to26 85 30 54 6523 [ 168 308 448 532 ] [ 1 5 10 1 1 15 2 17 ] ]
[ (full) (18) v10to26 89 30 56 7211 [ 180 338 504 588 ] [ 5 1 9 4 17 1 2 19 ] ]
[ (full) (19) v10to26 93 30 58 7931 [ 196 364 546 650 ] [ 3 4 3 11 17 4 9 16 ] ]
[ (full) (20) v10to26 97 34 62 8683 [ 224 416 600 700 ] [ 3 5 3 13 15 5 15 10 ] ]
[ (full) (21) v10to26 101 28 50 9252 [ 224 442 644 750 ] [ 4 4 17 0 17 6 19 6 ] ]
[ (full) (22) v10to26 105 26 50 10068 [ 252 476 690 816 ] [ 2 7 17 0 7 16 34 0 ] ]
[ (full) (23) v10to26 109 30 54 10916 [ 270 504 750 900 ] [ 4 5 4 14 11 14 16 14 ] ]
[ (full) (24) v10to26 113 28 54 11796 [ 300 560 810 960 ] [ 6 4 6 14 11 16 30 2 ] ]
[ (full) (25) v10to26 117 32 58 12708 [ 312 588 870 1050 ] [ 8 4 8 13 7 22 22 13 ] ]
[ (full) (26) v10to26 121 30 58 13652 [ 336 644 952 1110 ] [ 10 2 19 4 28 6 33 4 ] ]
[ (full) (27) v27to40 125 34 62 14628 [ 360 700 1020 1200 ] [ 8 4 22 3 8 26 12 28 ] ]
[ (full) (28) v27to40 129 26 50 15371 [ 390 728 1050 1260 ] [ 3 10 3 23 4 31 11 31 ] ]
[ (full) (29) v27to40 133 30 54 16411 [ 420 784 1140 1350 ] [ 7 7 21 7 1 37 19 26 ] ]
[ (full) (30) v27to40 137 26 52 17483 [ 450 812 1200 1440 ] [ 5 10 19 10 15 25 23 25 ] ]
[ (full) (31) v27to40 141 30 56 18587 [ 480 868 1290 1530 ] [ 13 3 2 29 42 1 23 28 ] ]
[ (full) (32) v27to40 145 34 60 19723 [ 510 924 1350 1620 ] [ 17 0 10 23 10 35 19 35 ] ]
[ (full) (33) v27to40 149 30 58 20891 [ 540 980 1440 1710 ] [ 17 1 14 21 29 19 11 46 ] ]
[ (full) (34) v27to40 153 34 62 22091 [ 570 1036 1530 1800 ] [ 13 6 14 23 44 7 59 1 ] ]
[ (full) (35) v27to40 157 30 54 23008 [ 570 1064 1590 1890 ] [ 12 7 12 26 39 14 22 41 ] ]
[ (full) (36) v27to40 161 24 50 24272 [ 600 1120 1680 1980 ] [ 6 14 6 34 46 10 2 64 ] ]
[ (full) (37) v27to40 165 28 54 25568 [ 630 1204 1770 2100 ] [ 17 4 29 14 49 10 24 46 ] ]
[ (full) (38) v27to40 169 32 58 26896 [ 660 1260 1860 2220 ] [ 4 18 13 32 48 14 42 32 ] ]
[ (full) (39) v27to40 173 26 54 28256 [ 720 1316 1950 2310 ] [ 20 4 40 7 43 22 10 67 ] ]
[ (full) (40) v27to40 177 30 58 29648 [ 750 1372 2040 2430 ] [ 19 6 18 31 34 34 20 61 ] ]
] def
/eclval (LMQH) eclevel search pop length exch pop exch pop def
/i 0 def
{ % loop
0 1 43 {
/i exch def
/m metrics i get def
/frmt m 0 get def % Format of the symbol
/vers m 1 get def % Version of symbol
/size m 2 get def % Length of side
/asp2 m 3 get def % Position of second alignment symbol
/asp3 m 4 get def % Position of third alignment symbol
/nmod m 5 get def % Number of modules
/vergrp m 2 get def % Version group
/size m 3 get def % Length of side
/asp2 m 4 get def % Position of second alignment symbol
/asp3 m 5 get def % Position of third alignment symbol
/nmod m 6 get def % Number of modules
/ncws nmod 8 idiv def % Total number of codewords
/rbit nmod 8 mod def % Number of remainder bits
/lc4b false def % Last data codeword is 4 bits long
13074,39 → 15532,43
/rbit 0 def
/lc4b true def
} if
/ecws m 6 get eclval get def % Number of error correction codewords
/ecws m 7 get eclval get def % Number of error correction codewords
/dcws ncws ecws sub def % Number of data codewords
/dmod dcws 8 mul lc4b {4} {0} ifelse sub def % Number of data modules
/ecb1 m 7 get eclval 2 mul get def % First error correction blocks
/ecb2 m 7 get eclval 2 mul 1 add get def % Second error correction blocks
/ecb1 m 8 get eclval 2 mul get def % First error correction blocks
/ecb2 m 8 get eclval 2 mul 1 add get def % Second error correction blocks
/okay true def
format frmt ne {/okay false def} if % The format must match that supplied
format (any) ne format frmt ne and {/okay false def} if % The format must match that supplied
frmt (micro) eq fnc1first and {/okay false def} if
version (unset) ne version vers ne and {/okay false def} if % The version must match that supplied
msgbits length dmod gt {/okay false def} if % Bitstream must fit into data modules
ecb1 -1 eq ecb2 -1 eq or {/okay false def} if % Error correction level must be valid
/verbits msgbits vergrp get def
verbits -1 eq { % Bitstream must be available
/okay false def
} {
verbits length dmod gt {/okay false def} if % and fit into data modules
} ifelse
/term (000000000) 0 termlens vergrp get getinterval def
okay {exit} if
/i i 1 add def
} loop
} for
 
okay not {
/bwipp.qrcodeNoValidSymbol (No valid symbol available) //raiseerror exec
} if
 
/format frmt def
/version vers def
/msgbits verbits def
/dcpb dcws ecb1 ecb2 add idiv def % Base data codewords per block
/ecpb ncws ecb1 ecb2 add idiv dcpb sub def % Error correction codewords per block
 
% Complete the message bits by adding the terminator, truncated if neccessary
/terms <<
/M1 (000)
/M2 (00000)
/M3 (0000000)
/M4 (000000000)
>> def
/term terms version known {terms version get} {(0000)} ifelse def
/term term 0 dmod msgbits length sub term length 2 copy gt {exch} if pop getinterval def
msgbits length term length add string
dup 0 msgbits putinterval
dup msgbits length term putinterval
/msgbits exch def
 
% Expand the message bits by adding padding as necessary
/pad dmod string def
0 1 pad length 1 sub {pad exch 48 put} for
13599,15 → 16061,21
/qrcode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER qrcode--
 
% --BEGIN ENCODER maxicode--
% --REQUIRES preamble raiseerror renmaximatrix--
% --DESC: MaxiCode
% --EXAM: [)>^03001^02996152382802^029840^029001^0291Z00004951^029UPSN^02906X610^029159^0291234567^0291/1^029^029Y^029634 ALPHA DR^029PITTSBURGH^029PA^029^004
% --EXOP: mode=2 parse
% --RNDR: renmaximatrix
%%BeginResource: uk.co.terryburton.bwipp maxicode 0.0 2014121100 125796 124711
%%BeginData: 564 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmaximatrix dup /uk.co.terryburton.bwipp findresource put
begin
/maxicode {
14169,15 → 16637,21
/maxicode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER maxicode--
 
% --BEGIN ENCODER azteccode--
% --REQUIRES preamble raiseerror renmatrix--
% --DESC: Aztec Code
% --EXAM: This is Aztec Code
% --EXOP: format=full
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp azteccode 0.0 2014121100 173685 186101
%%BeginData: 679 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/azteccode {
14235,31 → 16709,302
% Convert from input into message bitstream
/msgbits () def
format (rune) ne raw and {/msgbits barcode def} if
format (rune) ne raw not and { % Simple autoencoder from input to bitstream using byte mode only
format (rune) ne raw not and {
 
% Determine the character count
/barlen barcode length def
barlen 31 le {
(00000) 5 string copy dup barlen 2 5 string cvrs
dup length 5 exch sub exch putinterval
/cc exch def
} {
(0000000000000000) 16 string copy dup barlen 31 sub 2 16 string cvrs
dup length 16 exch sub exch putinterval
/cc exch def
} ifelse
/cclen cc length def
 
% Create the bitstream as byte_mode_id character_count data_bytes
/msgbits 5 cclen add barlen 8 mul add string def
msgbits 0 (11111) putinterval
msgbits 5 cc putinterval
0 1 barlen 1 sub {
% State key: "U"pper, "L"ower, "M"ixed, "P"unctuation, "D"igit, "B"inary
/U 0 def /L 1 def /M 2 def /P 3 def /D 4 def /B 5 def
% Special function characters
/lu -1 def /ll -2 def /lm -3 def
/lp -4 def /ld -5 def /su -6 def
/sp -7 def /sb -8 def /fl -9 def
/p2 -10 def /p3 -11 def /p4 -12 def /p5 -13 def
% Character maps for each state
/charmaps [
% U L M P D
[ sp sp sp fl sp ] % 0
[ 32 32 32 13 32 ] % 1
[ (A) (a) 1 p2 (0) ] % 2 p2 = CR LF
[ (B) (b) 2 p3 (1) ] % 3 p3 = ". "
[ (C) (c) 3 p4 (2) ] % 4 p4 = ", "
[ (D) (d) 4 p5 (3) ] % 5 p5 = ": "
[ (E) (e) 5 (!) (4) ] % 6
[ (F) (f) 6 (") (5) ] % 7
[ (G) (g) 7 (#) (6) ] % 8
[ (H) (h) 8 ($) (7) ] % 9
[ (I) (i) 9 (%) (8) ] % 10
[ (J) (j) 10 (&) (9) ] % 11
[ (K) (k) 11 (') (,) ] % 12
[ (L) (l) 12 40 (.) ] % 13
[ (M) (m) 13 41 lu ] % 14
[ (N) (n) 27 (*) su ] % 15
[ (O) (o) 28 (+) -99 ] % 16
[ (P) (p) 29 (,) -99 ] % 17
[ (Q) (q) 30 (-) -99 ] % 18
[ (R) (r) 31 (.) -99 ] % 19
[ (S) (s) (@) (/) -99 ] % 20
[ (T) (t) 92 (:) -99 ] % 21
[ (U) (u) (^) (;) -99 ] % 22
[ (V) (v) (_) (<) -99 ] % 23
[ (W) (w) (`) (=) -99 ] % 24
[ (X) (x) (|) (>) -99 ] % 25
[ (Y) (y) (~) (?) -99 ] % 26
[ (Z) (z) 127 ([) -99 ] % 27
[ ll su ll (]) -99 ] % 28
[ lm lm lu ({) -99 ] % 29
[ ld ld lp (}) -99 ] % 30
[ sb sb sb lu -99 ] % 31
] def
% Invert charmaps to give character to value maps for each state
/charvals [ 32 dict 32 dict 32 dict 32 dict 16 dict ] def
0 1 charmaps length 1 sub {
/i exch def
(00000000) 8 string copy dup barcode i get cvi 2 8 string cvrs dup length 8 exch sub exch putinterval
msgbits 5 cclen add i 8 mul add 3 -1 roll putinterval
/encs charmaps i get def
0 1 4 {
/j exch def
encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
charvals j get exch i put
} for
} for
% Punctuation compression
/pcomp <<
<0d0a> p2 % CR LF
(. ) p3
(, ) p4
(: ) p5
>> def
/e 10000 def % "Empty"
/latlen [ % Bit length of latch between states
% To: U L M P D B From
[ 0 5 5 10 5 10 ] % U
[ 9 0 5 10 5 10 ] % L
[ 5 5 0 5 10 10 ] % M
[ 5 10 10 0 10 15 ] % P
[ 4 9 9 14 0 14 ] % D
[ 0 0 0 0 0 0 ] % B
] def
 
/latseq [ % Latch sequences between states
% To: U L M P D B From
[ [] [ll] [lm] [lm lp] [ld] [sb] ] % U
[ [ld lu] [] [lm] [lm lp] [ld] [sb] ] % L
[ [lu] [ll] [] [lp] [lu ld] [sb] ] % M
[ [lu] [lu ll] [lu lm] [] [lu ld] [lu sb] ] % P
[ [lu] [lu ll] [lu lm] [lu lm lp] [] [lu sb] ] % D
[ [lu] [ll] [lm] [] [] [] ] % B
] def
 
/shftlen [ % Bit length of shift to state
% To: U L M P D From
[ e e e 5 e ] % U
[ 5 e e 5 e ] % L
[ e e e 5 e ] % M
[ e e e e e ] % P
[ 4 e e 4 e ] % D
] def
% U L M P D B
/charsize [ 5 5 5 5 4 8 ] def
% U L M P D B
/curlen [ 0 e e e e e ] def
/curseq [ [] [] [] [] [] [] ] def
/backto U def % U
/lastchar () def
% Derive the optimal sequences ending in each state
barcode {
/char exch def
% Check for optimisations in the current sequences by latching from x to y
{ % loop
/imp false def
[ U L M P D B ] {
/x exch def
[ U L M P D B ] {
/y exch def
x B ne y backto eq or { % Only B -> backto
/cost curlen x get latlen x get y get add def
cost curlen y get lt {
curlen y cost put
curseq y [
curseq x get aload pop
latseq x get y get aload pop
] put
y B eq { % Set backto to previous state
/backto x P eq x D eq or {U} {x} ifelse def
} if
/imp true def
} if
} if
} forall
} forall
imp not {exit} if % Repeat unless no improvement
} loop
 
% Determine optimal next sequences for each valid encoding
/nxtlen [ e e e e e e ] def
/nxtseq 6 array def
[ U L M P D B ] {
/x exch def
{ % loop for common exit
% Skip states that cannot encode character
x B ne {charvals x get char known not {exit} if} if
% Extend directly
/cost curlen x get charsize x get add def
cost nxtlen x get lt {
nxtlen x cost put
nxtseq x [ curseq x get aload pop char ] put
} if
% Optimise for direct shifts from y to x
x B eq {exit} if % B is treated as a latch
[ U L M P D ] {
/y exch def
x y ne {
/cost curlen y get shftlen y get x get add charsize x get add def
cost nxtlen y get lt {
nxtlen y cost put
nxtseq y [
curseq y get aload pop
x U eq {su} {sp} ifelse
char
] put
} if
} if
} forall
exit
} loop
} forall
% Optimise using P compression
lastchar () ne {
/pchars 2 string dup 0 lastchar put dup 1 char put def
pcomp pchars known {
curlen P get nxtlen P get lt {
nxtlen P curlen P get put
nxtseq P [ curseq P get aload pop pop pcomp pchars get ] put
} if
} if
} if
% Account for binary extension for 32 or more bytes
/numbytes 0 def
nxtseq B get {
sb eq {0} {numbytes 1 add} ifelse /numbytes exch def
} forall
numbytes 32 eq {nxtlen B nxtlen B get 11 add put} if
/curlen nxtlen def
/curseq nxtseq def
/lastchar char def
} forall
% Select the optimal sequence
/minseq e def
[ U L M P D B ] {
/i exch def
curlen i get minseq lt {
/minseq curlen i get def
/seq curseq i get def
} if
} forall
% Encoding functions
/tobin {
string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for
dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
} bind def
/encu {charvals U get exch get 5 tobin} bind def
/encl {charvals L get exch get 5 tobin} bind def
/encm {charvals M get exch get 5 tobin} bind def
/encp {charvals P get exch get 5 tobin} bind def
/encd {charvals D get exch get 4 tobin} bind def
/encfuncs [ /encu /encl /encm /encp /encd ] def
/addtomsgbits {
/v exch def
msgbits j v putinterval
/j j v length add def
} bind def
% Encode the sequence
/state U def
/msgbits minseq string def
/i 0 def /j 0 def {
i seq length ge {exit} if
state B ne {
/char seq i get def
% Encode character
char encfuncs state get load exec addtomsgbits
/i i 1 add def
% Encode shifted next character
char su eq char sp eq or {
seq i get char su eq {encu} {encp} ifelse addtomsgbits
/i i 1 add def
} if
% Latches to new state
char lu eq {/state U def} if
char ll eq {/state L def} if
char lm eq {/state M def} if
char lp eq {/state P def} if
char ld eq {/state D def} if
char sb eq {/state B def} if
} { % Binary
% Find number of bytes before latch or end
/numbytes 0 def {
i numbytes add seq length ge {exit} if
seq i numbytes add get 0 lt {exit} if
/numbytes numbytes 1 add def
} loop
% Encode length
numbytes 31 le {
numbytes 5 tobin addtomsgbits
} {
0 5 tobin addtomsgbits
numbytes 31 sub 11 tobin addtomsgbits
} ifelse
% Encode bytes
numbytes {
seq i get 8 tobin addtomsgbits
/i i 1 add def
} repeat
% Return to previous state as indicated
i seq length lt {
/char seq i get def
/i i 1 add def
char lu eq {/state U def} if
char ll eq {/state L def} if
char lm eq {/state M def} if
} if
} ifelse
} loop
 
} if
 
% Lookup the most appropriate symbol specification
14583,15 → 17328,21
/azteccode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER azteccode--
 
% --BEGIN ENCODER codeone--
% --REQUIRES preamble raiseerror renmatrix--
% --DESC: Code One
% --EXAM: Code One
% --EXOP: version=B
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp codeone 0.0 2014121100 104659 104025
%%BeginData: 328 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/codeone {
14917,16 → 17668,21
/codeone dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER codeone--
 
% --BEGIN ENCODER gs1-cc--
% --REQUIRES micropdf417 pdf417--
% --REQUIRES preamble raiseerror renmatrix micropdf417 pdf417--
% --DESC: GS1 Composite 2D Component
% --EXAM: (01)95012345678903(3103)000123
% --EXOP: ccversion=b cccolumns=4
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp gs1-cc 0.0 2014121100 208010 203774
%%BeginData: 650 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /pdf417 dup /uk.co.terryburton.bwipp findresource put
dup /micropdf417 dup /uk.co.terryburton.bwipp findresource put
15574,17 → 18330,21
/gs1-cc dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER gs1-cc--
 
% --BEGIN ENCODER ean13composite--
% --REQUIRES ean13 micropdf417 pdf417 gs1-cc--
% --SUGGESTS ean5 ean2--
% --REQUIRES preamble raiseerror renlinear renmatrix ean5 ean2 ean13 micropdf417 pdf417 gs1-cc--
% --DESC: EAN-13 Composite
% --EXAM: 2112345678900|(99)1234-abcd
% --EXOP: includetext
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp ean13composite 0.0 2014121100 84954 88322
%%BeginData: 72 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
2 dict
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /ean13 dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
15654,17 → 18414,21
/ean13composite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ean13composite--
 
% --BEGIN ENCODER ean8composite--
% --REQUIRES ean8 micropdf417 pdf417 gs1-cc--
% --SUGGESTS ean5 ean2--
% --REQUIRES preamble raiseerror renlinear renmatrix ean5 ean2 ean8 micropdf417 pdf417 gs1-cc--
% --DESC: EAN-8 Composite
% --EXAM: 02345673|(21)A12345678
% --EXOP: includetext
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp ean8composite 0.0 2014121100 88815 88768
%%BeginData: 75 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
2 dict
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /ean8 dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
15737,17 → 18501,21
/ean8composite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER ean8composite--
 
% --BEGIN ENCODER upcacomposite--
% --REQUIRES upca micropdf417 pdf417 gs1-cc--
% --SUGGESTS ean5 ean2--
% --REQUIRES preamble raiseerror renlinear renmatrix ean5 ean2 upca micropdf417 pdf417 gs1-cc--
% --DESC: UPC-A Composite
% --EXAM: 416000336108|(99)1234-abcd
% --EXOP: includetext
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp upcacomposite 0.0 2014121100 84932 88301
%%BeginData: 72 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
2 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /upca dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
15817,17 → 18585,21
/upcacomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER upcacomposite--
 
% --BEGIN ENCODER upcecomposite--
% --REQUIRES upce micropdf417 pdf417 gs1-cc--
% --SUGGESTS ean5 ean2--
% --REQUIRES preamble raiseerror renlinear renmatrix ean5 ean2 upce micropdf417 pdf417 gs1-cc--
% --DESC: UPC-E Composite
% --EXAM: 00123457|(15)021231
% --EXOP: includetext
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp upcecomposite 0.0 2014121100 85886 92764
%%BeginData: 87 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
2 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /upce dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
15912,16 → 18684,21
/upcecomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER upcecomposite--
 
% --BEGIN ENCODER databaromnicomposite--
% --REQUIRES databaromni micropdf417 pdf417 gs1-cc--
% --REQUIRES preamble raiseerror renlinear renmatrix databaromni micropdf417 pdf417 gs1-cc--
% --DESC: GS1 DataBar Omnidirectional Composite
% --EXAM: (01)03612345678904|(11)990102
% --EXOP:
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp databaromnicomposite 0.0 2014121100 97855 88807
%%BeginData: 100 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
2 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /databaromni dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
16019,16 → 18796,21
/databaromnicomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databaromnicomposite--
 
% --BEGIN ENCODER databarstackedcomposite--
% --REQUIRES databaromni databarstacked micropdf417 pdf417 gs1-cc--
% --REQUIRES preamble raiseerror renlinear renmatrix databaromni databarstacked micropdf417 pdf417 gs1-cc--
% --DESC: GS1 DataBar Stacked Composite
% --EXAM: (01)03412345678900|(17)010200
% --EXOP:
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp databarstackedcomposite 0.0 2014121100 87821 90984
%%BeginData: 96 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
2 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /databarstacked dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
16122,16 → 18904,21
/databarstackedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarstackedcomposite--
 
% --BEGIN ENCODER databarstackedomnicomposite--
% --REQUIRES databaromni databarstackedomni micropdf417 pdf417 gs1-cc--
% --REQUIRES preamble raiseerror renlinear renmatrix databaromni databarstackedomni micropdf417 pdf417 gs1-cc--
% --DESC: GS1 DataBar Stacked Omnidirectional Composite
% --EXAM: (01)03612345678904|(11)990102
% --EXOP:
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp databarstackedomnicomposite 0.0 2014121100 87897 90952
%%BeginData: 96 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
2 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /databarstackedomni dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
16225,16 → 19012,21
/databarstackedomnicomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarstackedomnicomposite--
 
% --BEGIN ENCODER databartruncatedcomposite--
% --REQUIRES databaromni databartruncated micropdf417 pdf417 gs1-cc--
% --REQUIRES preamble raiseerror renlinear renmatrix databaromni databartruncated micropdf417 pdf417 gs1-cc--
% --DESC: GS1 DataBar Truncated Composite
% --EXAM: (01)03612345678904|(11)990102
% --EXOP:
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp databartruncatedcomposite 0.0 2014121100 88891 91934
%%BeginData: 100 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
2 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /databartruncated dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
16332,16 → 19124,21
/databartruncatedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databartruncatedcomposite--
 
% --BEGIN ENCODER databarlimitedcomposite--
% --REQUIRES databarlimited micropdf417 pdf417 gs1-cc--
% --REQUIRES preamble raiseerror renlinear renmatrix databarlimited micropdf417 pdf417 gs1-cc--
% --DESC: GS1 DataBar Limited Composite
% --EXAM: (01)03512345678907|(21)abcdefghijklmnopqrstuv
% --EXOP:
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp databarlimitedcomposite 0.0 2014121100 81640 81749
%%BeginData: 79 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
2 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /databarlimited dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
16418,16 → 19215,21
/databarlimitedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarlimitedcomposite--
 
% --BEGIN ENCODER databarexpandedcomposite--
% --REQUIRES databarexpanded micropdf417 pdf417 gs1-cc--
% --REQUIRES preamble raiseerror renlinear renmatrix databarexpanded micropdf417 pdf417 gs1-cc--
% --DESC: GS1 DataBar Expanded Composite
% --EXAM: (01)93712345678904(3103)001234|(91)1A2B3C4D5E
% --EXOP:
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp databarexpandedcomposite 0.0 2014121100 84742 88135
%%BeginData: 98 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
2 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /databarexpanded dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
16523,16 → 19325,21
/databarexpandedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarexpandedcomposite--
 
% --BEGIN ENCODER databarexpandedstackedcomposite--
% --REQUIRES databarexpanded databarexpandedstacked micropdf417 pdf417 gs1-cc--
% --REQUIRES preamble raiseerror renlinear renmatrix databarexpanded databarexpandedstacked micropdf417 pdf417 gs1-cc--
% --DESC: GS1 DataBar Expanded Stacked Composite
% --EXAM: (01)00012345678905(10)ABCDEF|(21)12345678
% --EXOP: segments=4
% --RNDR: renmatrix renlinear
%%BeginResource: uk.co.terryburton.bwipp databarexpandedstackedcomposite 0.0 2014121100 87600 90640
%%BeginData: 95 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
2 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /databarexpandedstacked dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
16625,16 → 19432,21
/databarexpandedstackedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER databarexpandedstackedcomposite--
 
% --BEGIN ENCODER gs1-128composite--
% --REQUIRES code128 gs1-128 micropdf417 pdf417 gs1-cc--
% --REQUIRES preamble raiseerror renlinear renmatrix code128 gs1-128 micropdf417 pdf417 gs1-cc--
% --DESC: GS1-128 Composite
% --EXAM: (00)030123456789012340|(02)13012345678909(37)24(10)1234567ABCDEFG
% --EXOP: ccversion=c
% --RNDR: renlinear renmatrix
%%BeginResource: uk.co.terryburton.bwipp gs1-128composite 0.0 2014121100 92047 87940
%%BeginData: 100 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
2 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /gs1-128 dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
16732,16 → 19544,21
/gs1-128composite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER gs1-128composite--
 
% --BEGIN ENCODER gs1datamatrix--
% --REQUIRES datamatrix--
% --REQUIRES preamble raiseerror renmatrix datamatrix--
% --DESC: GS1 Data Matrix
% --EXAM: (01)03453120000011(17)120508(10)ABCD1234(410)9501101020917
% --EXOP:
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp gs1datamatrix 0.0 2014121100 76851 79937
%%BeginData: 134 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /datamatrix dup /uk.co.terryburton.bwipp findresource put
begin
16873,16 → 19690,166
/gs1datamatrix dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER gs1datamatrix--
 
% --BEGIN ENCODER gs1qrcode--
% --REQUIRES preamble raiseerror renmatrix qrcode--
% --DESC: GS1 QR Code
% --EXAM: (01)03453120000011(8200)http://www.abc.net(10)ABCD1234(410)9501101020917
% --EXOP:
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp gs1qrcode 0.0 2014121100 76691 83197
%%BeginData: 133 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /qrcode dup /uk.co.terryburton.bwipp findresource put
begin
/gs1qrcode {
 
20 dict begin % Confine variables to local scope
 
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
 
/dontdraw false def
% Parse the input options
options type /stringtype eq {
1 dict begin
options {
token false eq {exit} if dup length string cvs (=) search
true eq {cvlit exch pop exch def} {cvlit true def} ifelse
} loop
currentdict end /options exch def
} if
options {def} forall
 
% Expand ordinals of the form ^NNN to ASCII
/expand {
/in exch def
/out in length string def
/j 0 def
in
{ % loop
(^) search {
dup out exch j exch putinterval
length j add 1 add /j exch def
pop
dup 0 3 getinterval cvi out exch j 1 sub exch put
dup length 3 sub 3 exch getinterval
} {
dup out exch j exch putinterval
length j add /j exch def
out 0 j getinterval exit
} ifelse
} loop
} bind def
% Parse out AIs
/ais [] def
/aival 2 dict def
barcode dup length 1 sub 1 exch getinterval
{ % loop
dup () eq {exit} if
(\)) search pop
exch pop
exch (\() search {
exch pop exch 3 1 roll
} {
() 3 1 roll
} ifelse
[ ais aload pop counttomark 2 add index ] /ais exch def
aival 3 1 roll expand put
} loop
pop
 
% Pre-defined fixed length data field AIs
% any AI whose prefix is not included in this table must be
% terminated with "FNC1", even if it's fixed length
/aifixed 23 dict def
[
0 1 4 {} for
] {
(00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put
} forall
[
11 1 20 {} for
23
31 1 36 {} for
41
] {
10 2 string cvrs dup aifixed 3 1 roll put
} forall
 
% Create the qrcode data
/fnc1 -1 def
/qrc [ fnc1 ] def
0 1 ais length 1 sub {
/i exch def
/ai ais i get def
/val aival ai get def
qrc length ai length add val length add array
dup 0 qrc putinterval
dup qrc length ai [ exch {} forall ] putinterval
dup qrc length ai length add val [ exch {} forall ] putinterval
/qrc exch def
i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1
qrc length 1 add array
dup 0 qrc putinterval
dup qrc length fnc1 put
/qrc exch def
} if
} for
 
% Compose input to qrcode
/barcode qrc length 1 add 5 mul string def
/i 0 def /j 0 def {
i qrc length eq {exit} if
qrc i get dup fnc1 eq {
pop barcode j (^FNC1) putinterval
/j j 4 add def
} {
barcode exch j exch put
} ifelse
/i i 1 add def
/j j 1 add def
} loop
/barcode barcode 0 j getinterval def
 
% Get the result of encoding with qrcode
options (dontdraw) true put
options (parsefnc) true put
/args barcode options //qrcode exec def
 
args (opt) options put
args
dontdraw not //renmatrix if
end
 
} bind def
/gs1qrcode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER gs1qrcode--
 
% --BEGIN ENCODER hibccode39--
% --REQUIRES code39--
% --REQUIRES preamble raiseerror renlinear code39--
% --DESC: HIBC Code 39
% --EXAM: A123BJC5D6E71
% --EXOP: includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp hibccode39 0.0 2014121100 64068 67295
%%BeginData: 92 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code39 dup /uk.co.terryburton.bwipp findresource put
begin
16898,6 → 19865,7
/textsize 10 def
/textyoffset -7 def
/textxoffset 0 def
/validatecheck false def
 
% Parse the input options
options type /stringtype eq {
16915,25 → 19883,37
/textyoffset textyoffset cvr def
/textxoffset textxoffset cvr def
 
/barlen barcode length def
 
% Create a string of the available characters
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
 
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
/bwipp.hibccode39badCharacter (HIBC Code 39 must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
} if
} for
 
/barlen barcode length validatecheck {1 sub} if def
 
/checksum 41 def
0 1 barlen 1 sub {
barcode exch 1 getinterval charvals exch get
checksum add /checksum exch def
} for
/checksum checksum 43 mod def
validatecheck {
barcode barlen get barchars checksum get ne {
/bwipp.hibccode39badCheckDigit (Incorrect HIBC Code 39 check digit provided) //raiseerror exec
} if
/barcode barcode 0 barlen getinterval def
} if
 
/barcode barlen 2 add string dup 1 barcode putinterval def
barcode 0 43 put
barcode barlen 1 add barchars checksum get put
 
/checksum 0 def
0 1 barlen {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/checksum checksum indx add def
} for
barcode barlen 1 add barchars checksum 43 mod get put
 
/text barlen 4 add string def
text 0 42 put
text 1 barcode putinterval
16943,6 → 19923,7
% Get the result of encoding with code39
options (dontdraw) true put
options (includecheck) false put
options (validatecheck) false put
/args barcode options //code39 exec def
 
args (txt) [ [text textxoffset textyoffset textfont textsize] ] put
16958,16 → 19939,21
/hibccode39 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER hibccode39--
 
% --BEGIN ENCODER hibccode128--
% --REQUIRES code128--
% --REQUIRES preamble raiseerror renlinear code128--
% --DESC: HIBC Code 128
% --EXAM: A123BJC5D6E71
% --EXOP: includetext
% --RNDR: renlinear
%%BeginResource: uk.co.terryburton.bwipp hibccode128 0.0 2014121100 63971 67258
%%BeginData: 91 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code128 dup /uk.co.terryburton.bwipp findresource put
begin
16983,6 → 19969,7
/textsize 10 def
/textyoffset -7 def
/textxoffset 0 def
/validatecheck false def
 
% Parse the input options
options type /stringtype eq {
17000,25 → 19987,37
/textyoffset textyoffset cvr def
/textxoffset textxoffset cvr def
 
/barlen barcode length def
 
% Create a string of the available characters
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
 
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
/bwipp.hibccode128badCharacter (HIBC Code 128 must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
} if
} for
 
/barlen barcode length validatecheck {1 sub} if def
 
/checksum 41 def
0 1 barlen 1 sub {
barcode exch 1 getinterval charvals exch get
checksum add /checksum exch def
} for
/checksum checksum 43 mod def
validatecheck {
barcode barlen get barchars checksum get ne {
/bwipp.hibccode128badCheckDigit (Incorrect HIBC Code 128 check digit provided) //raiseerror exec
} if
/barcode barcode 0 barlen getinterval def
} if
 
/barcode barlen 2 add string dup 1 barcode putinterval def
barcode 0 43 put
barcode barlen 1 add barchars checksum get put
 
/checksum 0 def
0 1 barlen {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/checksum checksum indx add def
} for
barcode barlen 1 add barchars checksum 43 mod get put
 
/text barlen 4 add string def
text 0 42 put
text 1 barcode putinterval
17027,6 → 20026,7
 
% Get the result of encoding with code128
options (dontdraw) true put
options (validatecheck) false put
/args barcode options //code128 exec def
 
args (txt) [ [text textxoffset textyoffset textfont textsize] ] put
17042,16 → 20042,21
/hibccode128 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER hibccode128--
 
% --BEGIN ENCODER hibcdatamatrix--
% --REQUIRES datamatrix--
% --REQUIRES preamble raiseerror renmatrix datamatrix--
% --DESC: HIBC Data Matrix
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp hibcdatamatrix 0.0 2014121100 62602 69050
%%BeginData: 74 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /datamatrix dup /uk.co.terryburton.bwipp findresource put
begin
17063,6 → 20068,7
/barcode exch def % We are given a barcode string
 
/dontdraw false def
/validatecheck false def
 
% Parse the input options
options type /stringtype eq {
17075,27 → 20081,40
} if
options {def} forall
 
/barlen barcode length def
 
% Create a string of the available characters
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
 
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
/bwipp.hibcdatamatrixBadCharacter (HIBC Data Matrix must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
} if
} for
 
/barlen barcode length validatecheck {1 sub} if def
 
/checksum 41 def
0 1 barlen 1 sub {
barcode exch 1 getinterval charvals exch get
checksum add /checksum exch def
} for
/checksum checksum 43 mod def
validatecheck {
barcode barlen get barchars checksum get ne {
/bwipp.hibcdatamatrixBadCheckDigit (Incorrect HIBC Data Matrix check digit provided) //raiseerror exec
} if
/barcode barcode 0 barlen getinterval def
} if
 
/barcode barlen 2 add string dup 1 barcode putinterval def
barcode 0 43 put
barcode barlen 1 add barchars checksum get put
 
/checksum 0 def
0 1 barlen {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/checksum checksum indx add def
} for
barcode barlen 1 add barchars checksum 43 mod get put
 
% Get the result of encoding with datamatrix
options (dontdraw) true put
options (validatecheck) false put
/args barcode options //datamatrix exec def
 
args (opt) options put
17109,16 → 20128,21
/hibcdatamatrix dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER hibcdatamatrix--
 
% --BEGIN ENCODER hibcpdf417--
% --REQUIRES pdf417--
% --REQUIRES preamble raiseerror renmatrix pdf417--
% --DESC: HIBC PDF417
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp hibcpdf417 0.0 2014121100 61835 65021
%%BeginData: 78 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /pdf417 dup /uk.co.terryburton.bwipp findresource put
begin
17131,6 → 20155,7
 
/dontdraw false def
/columns 2 def
/validatecheck false def
 
% Parse the input options
options type /stringtype eq {
17145,28 → 20170,41
 
/columns columns cvi def
 
/barlen barcode length def
 
% Create a string of the available characters
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
 
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
/bwipp.hibcpdf417BadCharacter (HIBC PDF417 must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
} if
} for
 
/barlen barcode length validatecheck {1 sub} if def
 
/checksum 41 def
0 1 barlen 1 sub {
barcode exch 1 getinterval charvals exch get
checksum add /checksum exch def
} for
/checksum checksum 43 mod def
validatecheck {
barcode barlen get barchars checksum get ne {
/bwipp.hibcpdf417BadCheckDigit (Incorrect HIBC PDF417 check digit provided) //raiseerror exec
} if
/barcode barcode 0 barlen getinterval def
} if
 
/barcode barlen 2 add string dup 1 barcode putinterval def
barcode 0 43 put
barcode barlen 1 add barchars checksum get put
 
/checksum 0 def
0 1 barlen {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/checksum checksum indx add def
} for
barcode barlen 1 add barchars checksum 43 mod get put
 
% Get the result of encoding with pdf417
options (dontdraw) true put
options (columns) columns put
options (validatecheck) false put
/args barcode options //pdf417 exec def
 
args (opt) options put
17180,16 → 20218,21
/hibcpdf417 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER hibcpdf417--
 
% --BEGIN ENCODER hibcmicropdf417--
% --REQUIRES micropdf417--
% --REQUIRES preamble raiseerror renmatrix micropdf417--
% --DESC: HIBC MicroPDF417
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp hibcmicropdf417 0.0 2014121100 61885 64952
%%BeginData: 78 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /micropdf417 dup /uk.co.terryburton.bwipp findresource put
begin
17202,6 → 20245,7
 
/dontdraw false def
/columns 2 def
/validatecheck false def
 
% Parse the input options
options type /stringtype eq {
17216,28 → 20260,41
 
/columns columns cvi def
 
/barlen barcode length def
 
% Create a string of the available characters
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
 
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
/bwipp.hibcmicropdf417BadCharacter (HIBC MicroPDF417 must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
} if
} for
 
/barlen barcode length validatecheck {1 sub} if def
 
/checksum 41 def
0 1 barlen 1 sub {
barcode exch 1 getinterval charvals exch get
checksum add /checksum exch def
} for
/checksum checksum 43 mod def
validatecheck {
barcode barlen get barchars checksum get ne {
/bwipp.hibcmicropdf417BadCheckDigit (Incorrect HIBC MicroPDF417 check digit provided) //raiseerror exec
} if
/barcode barcode 0 barlen getinterval def
} if
 
/barcode barlen 2 add string dup 1 barcode putinterval def
barcode 0 43 put
barcode barlen 1 add barchars checksum get put
 
/checksum 0 def
0 1 barlen {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/checksum checksum indx add def
} for
barcode barlen 1 add barchars checksum 43 mod get put
 
% Get the result of encoding with micropdf417
options (dontdraw) true put
options (columns) columns put
options (validatecheck) false put
/args barcode options //micropdf417 exec def
 
args (opt) options put
17251,16 → 20308,21
/hibcmicropdf417 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER hibcmicropdf417--
 
% --BEGIN ENCODER hibcqrcode--
% --REQUIRES qrcode--
% --REQUIRES preamble raiseerror renmatrix qrcode--
% --DESC: HIBC QR Code
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp hibcqrcode 0.0 2014121100 65786 68742
%%BeginData: 74 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /qrcode dup /uk.co.terryburton.bwipp findresource put
begin
17272,6 → 20334,7
/barcode exch def % We are given a barcode string
 
/dontdraw false def
/validatecheck false def
 
% Parse the input options
options type /stringtype eq {
17284,27 → 20347,40
} if
options {def} forall
 
/barlen barcode length def
 
% Create a string of the available characters
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
 
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
/bwipp.hibcqrcodeBadCharacter (HIBC QR Code must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
} if
} for
 
/barlen barcode length validatecheck {1 sub} if def
 
/checksum 41 def
0 1 barlen 1 sub {
barcode exch 1 getinterval charvals exch get
checksum add /checksum exch def
} for
/checksum checksum 43 mod def
validatecheck {
barcode barlen get barchars checksum get ne {
/bwipp.hibcqrcodeBadCheckDigit (Incorrect HIBC QR Code check digit provided) //raiseerror exec
} if
/barcode barcode 0 barlen getinterval def
} if
 
/barcode barlen 2 add string dup 1 barcode putinterval def
barcode 0 43 put
barcode barlen 1 add barchars checksum get put
 
/checksum 0 def
0 1 barlen {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/checksum checksum indx add def
} for
barcode barlen 1 add barchars checksum 43 mod get put
 
% Get the result of encoding with qrcode
options (dontdraw) true put
options (validatecheck) false put
/args barcode options //qrcode exec def
 
args (opt) options put
17318,16 → 20394,21
/hibcqrcode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER hibcqrcode--
 
% --BEGIN ENCODER hibccodablockf--
% --REQUIRES codablockf--
% --REQUIRES preamble raiseerror renmatrix codablockf--
% --DESC: HIBC Codablock F
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
%%BeginResource: uk.co.terryburton.bwipp hibccodablockf 0.0 2014121100 61522 64700
%%BeginData: 74 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /codablockf dup /uk.co.terryburton.bwipp findresource put
begin
17339,6 → 20420,7
/barcode exch def % We are given a barcode string
 
/dontdraw false def
/validatecheck false def
 
% Parse the input options
options type /stringtype eq {
17351,27 → 20433,40
} if
options {def} forall
 
/barlen barcode length def
 
% Create a string of the available characters
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
 
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
/bwipp.codablockfBadCharacter (HIBC Codablock F must contain only digits, capital letters, spaces and the symbols -.$/+%) //raiseerror exec
} if
} for
 
/barlen barcode length validatecheck {1 sub} if def
 
/checksum 41 def
0 1 barlen 1 sub {
barcode exch 1 getinterval charvals exch get
checksum add /checksum exch def
} for
/checksum checksum 43 mod def
validatecheck {
barcode barlen get barchars checksum get ne {
/bwipp.hibccodablockfBadCheckDigit (Incorrect HIBC Codablock F check digit provided) //raiseerror exec
} if
/barcode barcode 0 barlen getinterval def
} if
 
/barcode barlen 2 add string dup 1 barcode putinterval def
barcode 0 43 put
barcode barlen 1 add barchars checksum get put
 
/checksum 0 def
0 1 barlen {
/i exch def
% Lookup the encoding for the each barcode character
barcode i 1 getinterval barchars exch search
pop % Discard true leaving pre
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/checksum checksum indx add def
} for
barcode barlen 1 add barchars checksum 43 mod get put
 
% Get the result of encoding with codablockf
options (dontdraw) true put
options (validatecheck) false put
/args barcode options //codablockf exec def
 
args (opt) options put
17385,6 → 20480,8
/hibccodablockf dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
%%EndData
%%EndResource
% --END ENCODER hibccodablockf--
 
% --END TEMPLATE--
/branches/Version14x/Scribus/scribus/plugins/barcodegenerator/barcodegenerator.cpp
40,7 → 40,7
setModal(true);
map["EAN-13"] = BarcodeType("ean13", "9781860742712", tr("12 or 13 digits"),
"[0-9]{12,13}");
map["EAN-8"] = BarcodeType("ean8", "12345678", tr("8 digits"),
map["EAN-8"] = BarcodeType("ean8", "12345670", tr("8 digits"),
"[0-9]{8,8}");
map["UPC-A"] = BarcodeType("upca", "78858101497", tr("11 or 12 digits"),
"[0-9]{11,12}");
66,7 → 66,7
map["UCC/EAN-128"] = BarcodeType("code128", "^104^102Count^0991234^101!",
tr("Variable number of ASCII characters and special function symbols, starting with the appropriate start character for the initial character set. UCC/EAN-128s must have a mandatory FNC 1 symbol immediately following the start character."),
"\\^[0-9a-zA-Z\\^\\!]*");
map["Rationalized Codabar"] = BarcodeType("rationalizedCodabar", "0123456789",
map["Rationalized Codabar"] = BarcodeType("rationalizedCodabar", "A0123456789D",
tr("Variable number of digits and any of the symbols -$:/.+ABCD."),
"[0-9A-D\\-\\$\\:\\/\\.\\+]*",
true, true);
81,7 → 81,7
map["Code 2 of 5"] = BarcodeType("code2of5", "0123456789",
tr("Variable number of digits"),
"[0-9]*");
map["Postnet"] = BarcodeType("postnet", "01234567",
map["Postnet"] = BarcodeType("postnet", "012345678",
tr("Variable number of digits"),
"[0-9]*",
false, true);