Si deseas deseas desarrollar una aplicación web que lea códigos de barras utilizando Node.js, puedes buscar un módulo de código de barras con npm o construir uno por tus propios medios. En este tutorial, te voy a ilustrar sobre cómo crear addon para leer códigos de barras en Ubuntu con DBR (Dynamsoft Barcode Reader para Linux).
Si deseas utilizar la última versión de node, no instales node y npm con la utilidad apt-get, ya que sólo obtendrás la versión antigua y provocarás el error - 'FunctionCallbackInfo' does not name a type:
Instalar Node
Descarga el último paquete de node: node-V5.3.0-linux-x64.tar.gz.
Extrae el paquete tal que así:
tar -xzf node-v5.3.0-linux-x64.tar.gz
Abre .bashrc
nano ~/.bashrc
Exporta el path node y guarda .bashrc
export PATH=$(YOUR_HOME)/Downloads/node-v5.3.0-linux-x64/bin:$PATH
Instala node-gyp
npm install -g node-gyp
Instala DBR
Descarga v4.0.0-pre-alpha.tar.gz
Extrae el paquete dbr
tar -xzf v4.0.0-pre-alpha.tar.gz
Encontrar la librería compartida cuando se construye el proyecto con make, crea un enlace simbólico del código de barras.
sudo ln -s $(DynamsoftBarcodeReader)/Redist/libDynamsoftBarcodeReaderx64.so /usr/lib/libDynamsoftBarcodeReaderx64.so
Como hacer el addon del lector de código de barras con Node
Crea binding.gyp y especifica las rutas de las cabeceras del DBR y las librerías compartidas:
{
"targets": [
{
"target_name": "dbr",
"sources": [ "dbr.cc" ],
"include_dirs" : [
"$(DynamsoftBarcodeReader)/Include"
],
"libraries": [
"-lDynamsoftBarcodeReaderx64", "-L$(DynamsoftBarcodeReader)/Redist"
]
}
]
}
Crea dbr.cc usando el código de emplo provisto por Dynamsoft Barcode Reader SDK:
#include
#include "If_DBR.h"
#include "BarcodeFormat.h"
#include "BarcodeStructs.h"
#include "ErrorCode.h"
using namespace v8;
// Barcode format
const char * GetFormatStr(__int64 format)
{
if (format == CODE_39)
return "CODE_39";
if (format == CODE_128)
return "CODE_128";
if (format == CODE_93)
return "CODE_93";
if (format == CODABAR)
return "CODABAR";
if (format == ITF)
return "ITF";
if (format == UPC_A)
return "UPC_A";
if (format == UPC_E)
return "UPC_E";
if (format == EAN_13)
return "EAN_13";
if (format == EAN_8)
return "EAN_8";
if (format == INDUSTRIAL_25)
return "INDUSTRIAL_25";
if (format == QR_CODE)
return "QR_CODE";
if (format == PDF417)
return "PDF417";
if (format == DATAMATRIX)
return "DATAMATRIX";
return "UNKNOWN";
}
void DecodeFile(const FunctionCallbackInfo& args) {
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
// convert v8 string to char *
String::Utf8Value fileName(args[0]->ToString());
String::Utf8Value license(args[1]->ToString());
char *pFileName = *fileName;
char *pszLicense = *license;
// Dynamsoft Barcode Reader: init
__int64 llFormat = (OneD | QR_CODE | PDF417 | DATAMATRIX);
int iMaxCount = 0x7FFFFFFF;
ReaderOptions ro = {0};
pBarcodeResultArray pResults = NULL;
// Initialize license
if (pszLicense)
{
printf("license: %sn", pszLicense);
DBR_InitLicense(pszLicense);
}
else
DBR_InitLicense("AC4561856D63EF392F46D7454052372D");
ro.llBarcodeFormat = llFormat;
ro.iMaxBarcodesNumPerPage = iMaxCount;
// Decode barcode image
int ret = DBR_DecodeFile(pFileName, &ro, &pResults);
printf("ret: %dn", ret);
if (ret == DBR_OK){
int count = pResults->iBarcodeCount;
pBarcodeResult* ppBarcodes = pResults->ppBarcodes;
pBarcodeResult tmp = NULL;
// javascript callback function
Local cb = Local::Cast(args[2]);
const unsigned argc = 1;
// array for storing barcode results
Local barcodeResults = Array::New(isolate);
for (int i = 0; i < count; i++)
{
tmp = ppBarcodes[i];
Local
Automáticamente generará los archivos del proyecto:
node-gyp configure
Construye el proyecto para producir dbr.node
node-gyp build
Escribe un test dbr.js que cargue la licencia SDK e invoque los métodos nativos de lectura:
var dbr = require('./build/Release/dbr');
var readline = require('readline');
var fs = require('fs');
fs.readFile('./license.txt', 'utf8', function (err, data) {
if (err) throw err;
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
var license = data.trim();
rl.question("Please input a barcode image path: ", function(answer) {
dbr.decodeFile(
answer, license,
function(msg){
var result = null;
for (index in msg) {
result = msg[index]
console.log(result['format']);
console.log(result['value']);
console.log("##################");
}
}
);
rl.close();
});
});
Ejecuta el script
Y este ha sido el artículo en el que trataba explicaros como hacer un lector de código con Node.js para Linux, esperamos que te haya gustado y sepas aplicarlo en tus futuros proyectos. Ya sabes que si nos quieres proponer un tema que quieres ver reflejado como un tutorial o como una práctica, solo tienes que hacer uso del área de comentarios de un poco más abajo. Por el contrario, si quieres enviarnos tus propios tutoriales, puedes hacerlo a través de la intranet de usuarios que está habilitada para ello, a través del menú Enviar Tutorial. Ya sabes, ayúdanos a crecer con tus conocimientos. ¡Un saludo y feliz código!
