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.
<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