Barcode

Die API /api/util/barcode erlaubt es Barcodes zu scannen und Barcodes zu erstellen.

Hinweis

Die Funktionen steht auch als Interface \Alvine\Application\Platform\Util\BarcodeFactory und Trait \Alvine\Application\Platform\Util\BarcodeFactoryImplementation zur Verfügung.

Barcode scannen

Ein Bild des Barcodes muss per form-data POST-Request an die API /api/util/barcode übergeben werden. Die Bilddaten müssen im Feld mit dem Namen image übergeben werden. Das Ergebnis des Scans ist ein JSON mit den ausgelesenen Barcodes, den Typ und die Qualität des Scans.

Die API kann aktuell die folgenden Typen auslesen: EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, Interleaved 2 of 5 und QR Code. Es können mehrere Barcodes in einer Datei übertragen werden.

Der Schlüssel im Dataset ist der Wert der PHP-Funktion md5_file. In Pagination wird die

In dem folgenden Beispiel wurden 2 EAN Codes übertragen.

{
    "dataset": {
        "1e77188c44ad267dedebf25b35b795f5": {
            "dataset": [
                {
                    "barcode": "0042720000069",
                    "type": "ean-13",
                    "quality": "18"
                },
                {
                    "barcode": "0042100005264",
                    "type": "ean-13",
                    "quality": "27"
                }
            ],
            "sys": {
                "message": "200 OK",
                "code": 200,
                "pagination": {
                    "total": 2
                }
            }
        }
    },
    "sys": {
        "pagination": {
            "total": 1
        },
        "message": "200 OK",
        "code": 200
    }
}

Wird kein Barcode gefunden, so wird ein leerer Datensatz zurückgegeben.

{
    "dataset": {
        "9b47d21b48f44a074e465848efb479c5": {
            "dataset": {},
            "sys": {
                "message": "200 OK",
                "code": 200,
                "pagination": {
                    "total": 0
                }
            }
        }
    },
    "sys": {
        "pagination": {
            "total": 1
        },
        "message": "200 OK",
        "code": 200
    }
}

Barcode erstellen

Mit dieser API /api/util/barcode lassen sich auch Barcodes erstellen. Dazu muss der Code per GET-Request als Parameter übergeben werden.

Die API unterstützt: EAN, UPC, ISBN, code-128-B, code 128-C, code raw, code 39, interleave 2 of 5, code 128, Codabar, Pleassy, MSI, code 39 und QR Code

Folgende Typen (erste Spalte) können übergeben werden (die Werte in der Zeile sind Aliase)

"ean", "ean13", "ean-13", "ean8", "ean-8"
"upc", "upc-a", "upc-e"
"isbn"
"39", "code39"
"128c", "code128c"
"128b", "code128b"
"128", "code128"
"128raw"
"i25", "interleaved 2 of 5"
"cbr", "codabar"
"msi"
"pls", "plessey"
"code93", "93"
"qrcode"

Die für den Ausdruck notwendige Größe des Barcodes kann die Größe des Barcodes über die Parameter width und height gesteuert werden. Die Größe des Bildes ergibt sich aus der Breite und Höhe plus dem Rand x-margin und y-margin.

Hinweis

Die Pixelgröße für DIN-Normen kann in den DIN-Tabellen nachgeschlagen werden. Zur Berechnung der Größe eines Barcodes kann auch die Webseite pixelcalculator.com helfen.

Bei EAN/GTIN und anderen Barcodes muss auf den spezifizierten Weißraum um die Barcodes geachtet werden.

Beispiel

Die folgende Beispielseite erlaubt es Barcodes einzugeben und anzuzeigen.

Barcode Webseite

<html>
    <head>
        <title>Barcode</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" 
              integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    </head>
    <body>
        <div class="container">
            <div class="row">
                <div class="col">
                    <h1>Barcode</h1>

                    <form class="form-inline">
                        <div class="form-group">
                            <input id="code" class="form-control">
                            <select class="ml-2 form-control" id="type">
                                <option selected>ean</option>
                                <option>qrcode</option>
                                <option>isbn</option>
                                <option>i25</option>
                                <option>128</option>
                                <option>msi</option>
                                <option>cbr</option>
                            </select>
                            <button class="ml-2 btn btn-primary" type="button" onclick="getCode();return false;">create</button>
                        </div>
                    </form>

                    <div>
                        <img id="result" class="img-fluid" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">
                    </div>
                    <div id="alert" class="alert alert-danger d-none" role="alert">

                    </div>
                </div>
            </div>
        </div>

        <script>

            function getCode() {

                var user = "administrator"; //User must have social group permissions  
                var password = "landsberied";
                var credentials = window.btoa(user + ":" + password);

                var code = document.querySelector('#code').value;

                var e = document.getElementById("type");
                var type = e.options[e.selectedIndex].text;

                var url = 'http://localhost/api/util/barcode?code=' + code + '&type=' + type;
                var headers = new Headers(
                        {
                            'Authorization': 'Basic ' + credentials,
                            'Accept': 'image/png'
                        }
                );
                var options = {
                    method: 'GET',
                    headers: headers,
                    mode: 'cors',
                    cache: 'default',
                    credentials: 'same-origin'
                };

                var request = new Request(url);

                var alertElement = document.querySelector('#alert');
                alertElement.innerText = "";
                alertElement.classList.add("d-none");
                document.querySelector('#result').src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";

                fetch(request, options).then((response) => {

                    if (response.status === 200) {

                        response.arrayBuffer().then((buffer) => {
                            var base64Flag = 'data:image/png;base64,';
                            var imageStr = arrayBufferToBase64(buffer);
                            document.querySelector('#result').src = base64Flag + imageStr;
                        });
                    } else if (response.status === 400) {

                        alertElement.innerText = "barcode is wrong";
                        alertElement.classList.remove("d-none");

                    } else {
                        alertElement.innerText = "Bad Request";
                        alertElement.classList.remove("d-none");

                    }


                });

                function arrayBufferToBase64(buffer) {
                    var binary = '';
                    var bytes = [].slice.call(new Uint8Array(buffer));

                    bytes.forEach((b) => binary += String.fromCharCode(b));

                    return window.btoa(binary);
                }
            }

        </script>

    </body>
</html>

Installation

Für die Serverinstallation müssen die Programme barcode, qrencode und zbarimg installiert sein.

Unter debian lassen diese Programme folgendermaßen installieren:

apt install qrencode barcode zbar-tools