BarScanner

From Documentation

BarScanner

Employment/Purpose

A barScanner component is used to scan and decode the barcode on the client side. There are many properties to dealing with the barScan component. First, you could use the type property to specify the type of barcode, for example: qr, code128, ..., after choose the type you want, you could scan the barcode by the scanner. You can choose the continue scanning by setting contScan="true", and setting the scan rate by setting scanRate="1", the unit of scanRate is sec/time. You can turn on the scanner switch by setting open="true", or close it by open="false".

Example

BarScanner demo.png

 <barScanner type="qr,code128" contScan="true" scanRate="0.5" height="100px"  onDetected='Clients.log(event.getData().toString())'/>

type

The BarScanner has 9 types for 1D and 1 type for 2D by default. After choosing the type of barcode, and you can scan the barcode as the type you choose. You also can scan multiple types at one time, just setting type="xxx1,xxx2". For example

 <barScanner type="qr,code128"/>

Note:

(1) The type that barScanner supported can be referenced as Supported Barcode Type (Default).

(2) Warn: if too many types are set for the widget, it may reduce the detecting accuracy.

(3) The barcode will restart every time you change the type.

contScan

contScan is a boolean attribute to let the barScanner can continue scan or not.

 <barScanner type="qr" contScan="true"/>

scanRate

The scanRate is a subsidiary, integer attribute for contScan. The scanRate="0.5" means the scanner will scan once every 0.5 sec.

 <barScanner type="code128" contScan="true" scanRate="0.5"/>

open

The open is boolean attribute to switch the barScanner. You can use the zk mvvm mechanism to to switch the barScanner.

 <window viewModel="@id('vm')@init('xxxVM')">
   <barScanner type="code128" open= "@bind('vm.open')"/>
 </window>

height, width

Height and width are string attributes to define the height and width of barScanner component.

 <barcode type="qr" height="100px", width="200px"/>

Note:

(1) height is a string as a format of "number+px"

(2) Because of some browsers issue, the ratio of camera screen can only show as default value. The camera screen would fill up the space as user defined.

(3)By testing, the camera screen size would affect the 1D result. After creating barScanner, please check the result.

registerLibrary

registerLibrary(constructor, library_name, [array of types] ) is a client-side, class-level method to register a custom library into barcode widget. The mechanism is like the registerLibrary in Barcode. The constructor is a json-format parameter to define all the need setting for the library.

constructor = 
{
	create: the function to create a reader prototype,
	name: the name of the reader, and we will mount the reader on the widget by wgt._'name'+'Reader',
	init: a function to initialize the reader properties,
	open: a function to enable the detecting function,
	decodeOnce: a reader decode method, and zk will implement the contScan attribute for you,
	setType: a function to connect the reader and widget types function,
	other: a json properties to let you to attend the reader method.(future feature)
}

Like barcode, if you register the own custom library into barScanner, every single widget should use the custom library object. The way to registering is zkmax.barscanner.BarScanner.registerLibrary(...). Here is the example that how we inject the quagga library object into the widget

<?script src="mybarscannerLibrary.js"?>
<script>
    ...
    zk.afterLoad('zkmax.barcode', function () {
        zkmax.barscanner.BarScanner.registerLibrary({
            create: jq.extend(true, {}, Quagga), //the reader
            name: "QUAGGA",
            init: zkmax.barscanner.BarScanner._quaggaInit,  //@param(wgt, video, canvas)
            open: zkmax.barscanner.BarScanner._quaggaOpen, //@param(wgt, video, canvas)
            decode: zkmax.barscanner.BarScanner._quaggaDecodeOnce,//@param(wgt, reader) 
            setTypes: zkmax.barscanner.BarScanner._quaggaSetType, //@param()
            other: null
         }, 'library-name', ['type1', 'type2', ...]);
    });
    ...
</script>

After you inject the library object into the widget, we will generate the javascript object mount on the widget. We generate zinit, zexecute, zopen, method onto the reader and we will use it internally. You can get the library object by wgt._'your_libarary_name'Reader. Note:

(1) registerLibrary is the pure-client-side method.

(2) As barcode, If you want to register the custom library for all the web application, you can add <javascript src="mybarscannerLibrary.js"/>the source file at WEB-INF/lang-addon.xml.

myRegister.js

    zk.afterLoad('zkmax.barcode', function () {
        zkmax.barscanner.BarScanner.registerLibrary(function mybarcode(wgt) {
            ...
             };
         }, 'library-name', ['type1', 'type2', ...]);
    });

Supported Barcode Type (Default)

Name
BarScanner Type
1D CODE Family

CODE128, CODE39, CODE39VIN,

1D EAN Family

EAN, EAN8,

1D Others

CODEBAR, UPC, UPC_E, I2OF5

2D

QR

Supported Events

Name
Event Type
onDetected
Event: Event

Notifies if the barcode scanner detect a barcode message.

Supported Children

*NONE

Use Cases

Version Description Example Location
     

Version History

Last Update : 2018/05/19


Version Date Content
8.6.0 May, 2018 BarScanner



Last Update : 2018/05/19

Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.