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!
Â