Browse Source

Add CODE128 barcode support

Neal Wilson 6 years ago
parent
commit
a51c1beb88
4 changed files with 134 additions and 0 deletions
  1. 3
    0
      README
  2. 29
    0
      config/Scripts/barcode.css
  3. 73
    0
      config/Scripts/barcode.js
  4. 29
    0
      config/Windows/batchdetailsnew.xml

+ 3
- 0
README View File

@@ -77,3 +77,6 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
77 77
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
78 78
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
79 79
 SOFTWARE.
80
+
81
+CODE128 support inn batch tags is based on code from:
82
+https://itlearnings.wordpress.com/2011/01/08/javascript-code128-barcode/

+ 29
- 0
config/Scripts/barcode.css View File

@@ -0,0 +1,29 @@
1
+/*==============================================================
2
+                CODE 128 styles
3
+===============================================================*/
4
+
5
+.barcode128h  {
6
+    clear: both;
7
+    padding: 0 10px /*quiet zone*/;
8
+    overflow: auto;
9
+    height: 0.35in   /*size*/;
10
+    margin-top: 20px;
11
+    margin-bottom: 20px;
12
+}
13
+ 
14
+.barcode128h div {
15
+    /*float: left;*/
16
+    height: 0.2 in  /*size*/;
17
+    display: inline;
18
+}
19
+ 
20
+.barcode128h .bar1 { border-left: 2px solid black }
21
+.barcode128h .bar2 { border-left: 4px solid black }
22
+.barcode128h .bar3 { border-left: 6px solid black }
23
+.barcode128h .bar4 { border-left: 8px solid black }
24
+.barcode128h .space0 { margin-right: 0px }
25
+.barcode128h .space1 { margin-right: 2px }
26
+.barcode128h .space2 { margin-right: 4px }
27
+.barcode128h .space3 { margin-right: 6px }
28
+.barcode128h .space4 { margin-right: 8px }
29
+ 

+ 73
- 0
config/Scripts/barcode.js View File

@@ -0,0 +1,73 @@
1
+BARS       = [212222,222122,222221,121223,121322,131222,122213,122312,132212,221213,221312,231212,112232,122132,122231,113222,123122,123221,223211,221132,221231,213212,223112,312131,311222,321122,321221,312212,322112,322211,212123,212321,232121,111323,131123,131321,112313,132113,132311,211313,231113,231311,112133,112331,132131,113123,113321,133121,313121,211331,231131,213113,213311,213131,311123,311321,331121,312113,312311,332111,314111,221411,431111,111224,111422,121124,121421,141122,141221,112214,112412,122114,122411,142112,142211,241211,221114,413111,241112,134111,111242,121142,121241,114212,124112,124211,411212,421112,421211,212141,214121,412121,111143,111341,131141,114113,114311,411113,411311,113141,114131,311141,411131,211412,211214,211232,23311120];
2
+START_BASE = 38
3
+STOP       = 106 //BARS[STOP]==23311120 (manually added a zero at the end)
4
+ 
5
+var fromType128 = {
6
+    A: function(charCode) {
7
+        if (charCode>=0 && charCode<32)
8
+            return charCode+64;
9
+        if (charCode>=32 && charCode<96)
10
+            return charCode-32;
11
+        return charCode;
12
+    },
13
+    B: function(charCode) {
14
+        if (charCode>=32 && charCode<128)
15
+            return charCode-32;
16
+        return charCode;
17
+    },
18
+    C: function(charCode) {
19
+        return charCode;
20
+    }
21
+};
22
+ 
23
+function code128(code, barcodeType) {
24
+    if (arguments.length<2)
25
+        barcodeType = code128Detect(code);
26
+    if (barcodeType=='C' && code.length%2==1)
27
+        code = '0'+code;
28
+    var a = parseBarcode128(code,  barcodeType);
29
+    return bar2html128(a.join('')) ;//+ '<label>' + code + '</label>';
30
+}
31
+ 
32
+ 
33
+function code128Detect(code) {
34
+    if (/^[0-9]+$/.test(code)) return 'C';
35
+    if (/[a-z]/.test(code)) return 'B';
36
+    return 'A';
37
+}
38
+ 
39
+function parseBarcode128(barcode, barcodeType) {
40
+    var bars = [];
41
+    bars.add = function(nr) {
42
+        var nrCode = BARS[nr];
43
+        this.check = this.length==0 ? nr : this.check + nr*this.length;
44
+        this.push( nrCode || format("UNDEFINED: %1->%2", nr, nrCode) );
45
+    };
46
+ 
47
+    bars.add(START_BASE + barcodeType.charCodeAt(0));
48
+    for(var i=0; i<barcode.length; i++)
49
+    {
50
+        var code = barcodeType=='C' ? +barcode.substr(i++, 2) : barcode.charCodeAt(i);
51
+        converted = fromType128[barcodeType](code);
52
+        if (isNaN(converted) || converted<0 || converted>106)
53
+            throw new Error(format("Unrecognized character (%1) at position %2 in code '%3'.", code, i, barcode));
54
+        bars.add( converted );
55
+    }
56
+    bars.push(BARS[bars.check % 103], BARS[STOP]);
57
+ 
58
+    return bars;
59
+}
60
+ 
61
+function format(c){
62
+    var d=arguments;
63
+    var e= new RegExp("%([1-"+(arguments.length-1)+"])","g");
64
+    return(c+"").replace(e,function(a,b){return d[b]})
65
+}
66
+ 
67
+function bar2html128(s) {
68
+    for(var pos=0, sb=[]; pos<s.length; pos+=2)
69
+    {
70
+        sb.push('<div class="bar' + s.charAt(pos) + ' space' + s.charAt(pos+1) + '"></div>');
71
+    }
72
+    return sb.join('');
73
+}

+ 29
- 0
config/Windows/batchdetailsnew.xml View File

@@ -527,12 +527,26 @@
527 527
                 styleFile.open(1);
528 528
                 output.writeTextElement("style", styleFile.readToString());
529 529
                 styleFile.close();
530
+                
531
+                styleFile = new QFile(QSettings.value("config") + "/Scripts/barcode.css");
532
+                styleFile.open(1);
533
+                output.writeTextElement("style", styleFile.readToString());
534
+                styleFile.close();
535
+                
530 536
                 output.writeStartElement("script");
531 537
                 scriptFile = new QFile(QSettings.value("config") + "/Scripts/qrcode.js");
532 538
                 scriptFile.open(1);
533 539
                 output.writeCDATA(scriptFile.readToString());
534 540
                 scriptFile.close();
535 541
                 output.writeEndElement();
542
+                
543
+                output.writeStartElement("script");
544
+                scriptFile = new QFile(QSettings.value("config") + "/Scripts/barcode.js");
545
+                scriptFile.open(1);
546
+                output.writeCDATA(scriptFile.readToString());
547
+                scriptFile.close();
548
+                output.writeEndElement();
549
+                
536 550
                 output.writeEndElement();
537 551
                 output.writeStartElement("body");
538 552
                 output.writeStartElement("h1");
@@ -541,6 +555,21 @@
541 555
                 output.writeTextElement("span", "Roasted at: " + batchTime);
542 556
                 output.writeTextElement("span", "On machine: " + machine);
543 557
                 output.writeTextElement("span", "Batch file: " + fileID);
558
+                
559
+                output.writeStartElement("div");
560
+                output.writeAttribute("id", "barcode");
561
+                output.writeAttribute("class", "barcode128h");
562
+                output.writeAttribute("align", "center");
563
+                output.writeEndElement();
564
+                
565
+                output.writeStartElement("script");
566
+                var c128data = 'var strBarcodeHTML = code128("';
567
+                c128data += fileID;
568
+                c128data += '", "C");'
569
+                c128data += 'document.getElementById("barcode").innerHTML = strBarcodeHTML;';
570
+                output.writeCDATA(c128data);
571
+                output.writeEndElement();
572
+                
544 573
                 output.writeStartElement("div");
545 574
                 output.writeAttribute("id", "container");
546 575
                 output.writeEndElement();

Loading…
Cancel
Save