has anyone experience with building an app with a Borcode Scanner.
I am thinking of developing a small app for a inventory system.
Any suggestions for a good OpenSource Barcode Scanner?


if you use a PC, or a Windows tablet you can use a USB Barcode Scanner.
This work as a keyboard.. you read the barcode and the scanner type the char/number like a keyboard.

if you want to use an Android system.. reading the barcode with the camera.. I do not know.. 🙂


Heres a rundown on scanners:

1) using a device’s camera is ok for infrequent use, in good lighting conditions. Not suitable for doing inventory which has to done quickly.

2) usb scanners come in two varieties: lcd and laser. Laser is faster, better in variable lighting conditions. They can be integrated into PhoneGap (through PhoneGap plugins) and Electron (through node.js plugins) applications. The downside is that you have now 2 devices to carry around: one for shooting the barcode, and another to enter quantity. That said, voice recognition is good enough now (at least on most devices) to consider using that for quantity input (using a headset mic with noise cancelling).

3) The standard in the industry is the Worth Data tricoder. Available in various models, the essence of it is built-in ability to grab a barcode and then, on the integrated numeric keypad, input the quantity. Once a section is done, the data can be uploaded (in a variety of ways — but the keyboard wedge way is old-school and problematic). This guarantees that the user will be able to go as fast as they need to.

The second option has advantages (being able to validate barcodes, or even barcodes by location, at the time of scanning). What you will need to have a concern about is ability of the app to keep up with an experienced inventory taker. If one is in a warehouse with 20,000 skus (some of our customers have more than that), there is no time to be wasted when doing inventory.


how to programming mobile barcode scanners, for setting up a inventory stockroom.

I have no experience in it.

Have to compare barcodes from an picklijst and the stock, also collect barcodes for flushing data.

So what I need is programming a menu, some functions, and a small database in the barcode scanner.
Also upload and download this data.

Can I use Lianja for this, and if so, can I write it in VFP or must it be Java ?

Are there minimal resources nessecary in the scanner, memory ?

I create a small project in Lianja can I compile it and place it on a mobile barcode reader together with it’s database.


There are a number of plug-ins for PhoneGap/Cordova that will integrate a barcode reader into a mobile app.

get an ruggedized Android table, add a first-class scanner, and write an app to work with it. If there is any volume at all involved, make sure you get a scanner that can work in low light. That typically means a laser barcode. Using the built-in camera, even with a flash (can you imagine that going off all over the place during inventory?) — because even with a flash there’s the “settling in” time these cameras require for focusing.


For mobile devices you should be building a PhoneGap app use a PhoneGap plugin to read the bar codes.

You use JavaScript (not Java) with the Lianja Web Framework which includes most of the VFP built-in functions. You call VFP code that runs on the server from the device.

There are several other alternatives to this also:

1. Use LianjaCloudDataServices.js with a third party framework to handle all CRUD operations and call Lianja/VFP code on the server.

2. Build a native app and make OData calls to interact with the Lianja Cloud Server.





is possible to insert barcode inside rsp page?
I’ve found this:…shtml#download

then I’ve try to:
copy the js folder inside lianja\library folder

thenh, I’ve created a sample rsp page:

<%@ Language=VFP %>
<Meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
private m_libpath = libPath()

    if isServer() or .t.
        ? "<link type='text/css' rel='stylesheet' href='../../library/report.css'/>"
        ? "<link type='text/css' rel='stylesheet' href='lib:/report.css'/>"

<style type="text/css">
<%@ include="report.css" %>

      #barcode {font-weight: normal; font-style: normal; line-height:normal; sans-serif; font-size: 12pt}


text raw

window.Lianja = window.parent.Lianja;


function get_object(id) {
    var object = null;
    if (document.layers) {
        object = document.layers[id];
        } else if (document.all) {
            bject = document.all[id];
        } else if (document.getElementById) {
            object = document.getElementById(id);
            return object;




set macros on
set fixed on
// report.rsp?parameter=value&parameter=value...
// parameters

// declare some special symbols (html uses ampersand so do we for macros)    
amp = chr(38) 
nbsp = amp + "nbsp;"  

// generate the html output 
? ('<table width="100%" style="overflow:auto;border-left:1px solid lightgray;border-right:1px solid lightgray;" cellpadding="0" cellspacing="0" bgcolor="white" border="0px">') 
? ('<caption class="tablecaption">Scheda articolo on &(date()) at &(time())</caption>') 

// first row of the table
gridlines = "true"  

    ? ('<table border="1" cellpadding="2" cellspacing="2" style="text-align: left; width: 100%;">')
    ? ('    <tbody>')
    ? ('        <tr>')
    ? ('            <td style="vertical-align: top;">')
    ? ('                Articolo<br />')
    ? ('                ' + "Articolo" + '</td>')
    ? ('            <td style="vertical-align: top; font face="Code 128AB HR Normale">')
    ? ('                Barcode<br />')
    ? ('
') ? ('
' + "12345AB" + '
') ? ('</div> ') ? (' </td>') ? (' </tr>') ? (' </tbody>') ? ('</table>') ? (' <p> <br /></p>') ?? ('</table>') // delete temporary files erase '&tmpfile..dbf' erase '&tmpfile..dbt' // restore record position as the table may be open in many places if m_recno <> 0 select &table if not empty(m_tag) set order tag &m_tag endif goto &m_recno endif // reselect cursor that was active on entry select &m_selected </script> %> </body> </html>

Following the sample… work.