使用Node.js构建跨平台的在线条码阅读器

在现代的Web开发中,Node.js因其轻量级和高性能而广受欢迎。它允许开发者使用JavaScript来构建复杂的服务器端Web应用程序。为了扩展和增强Node.js应用程序的功能,开发者可以使用C/C++来创建插件。本文将介绍如何通过包装DynamsoftBarcode Reader SDK来构建自定义的Node模块,并快速实现在线条码阅读器。

DynamsoftBarcode Reader简介

DynamsoftBarcode Reader提供了适用于Windows、Linux和Mac的C/C++共享库。这意味着任何高级编程语言,如JavaScript、Python、Java、Ruby、PHP等,都可以使用扩展或插件来包装C/C++ API。无论熟悉哪种编程语言,SDK都将通过几行代码加速条码阅读器应用程序的编码工作。

  • Code 39
  • Code 93
  • Code 128
  • Codabar
  • Interleaved 2 of 5
  • EAN-8
  • EAN-13
  • UPC-A
  • UPC-E
  • Industrial 2 of 5
  • QRCode
  • DataMatrix
  • PDF417
  • BMP
  • JPEG
  • PNG
  • GIF
  • TIFF
  • PDF

Windows、Linux和Mac操作系统。Node.js版本至少为v5.5.0。

创建Node.js条码插件

Node.js插件是动态链接的共享对象,用C/C++编写。如果之前没有接触过这部分内容,最好遵循官方教程来开始。

创建dbr.cc文件,并添加一个DecodeFile方法:

#include <node.h> #include <string.h> #include "If_DBR.h" #include "BarcodeFormat.h" #include "BarcodeStructs.h" #include "ErrorCode.h" using namespace v8; void DecodeFile(const FunctionCallbackInfo<Value> & args) { // 方法实现 } void Init(Handle<Object> exports) { NODE_SET_METHOD(exports, "decodeFile", DecodeFile); } NODE_MODULE(dbr, Init)

解析从JavaScript传递的参数:

Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); String::Utf8Value license(args[0]->ToString()); String::Utf8Value fileName(args[1]->ToString()); char *pFileName = *fileName; char *pszLicense = *license; __int64 llFormat = args[2]->IntegerValue(); Local<Function> cb = Local<Function>::Cast(args[3]);

解码条码图像:

int iMaxCount = 0x7FFFFFFF; ReaderOptions ro = {0}; pBarcodeResultArray pResults = NULL; ro.llBarcodeFormat = llFormat; ro.iMaxBarcodesNumPerPage = iMaxCount; DBR_InitLicense(pszLicense); int ret = DBR_DecodeFile(pFileName, &ro, &pResults);

将条码格式转换为字符串:

const char* GetFormatStr(__int64 format) { // 格式判断和转换 }

将结果转换为v8对象:

Local<Array> barcodeResults = Array::New(isolate); for (int i = 0; i < count; i++) { // 遍历和设置结果 }

安装DBR for Windows、Visual Studio和Python v2.7;DBR for Linux;DBR for Mac和Xcode。安装node-gyp:

npm install -g node-gyp

创建binding.gyp文件以进行多平台编译:

{ "targets": [ { "target_name": "dbr", "sources": ["dbr.cc"], "conditions": [ // 条件编译 ] } ] }

配置构建环境:

node-gyp configure

构建项目:

node-gyp build

已经成功构建了Node条码阅读器模块。现在是时候创建一个简单的条码阅读器应用程序了。

安装Express和Formidable:

npm install express npm install formidable

使用Express创建一个简单的网站:

var express = require('express'); var app = express(); // 网站配置

使用Formidable从表单中提取图像数据:

app.post('/upload', function(req, res) { var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files) { // 解析和处理上传的文件 }); });

导入条码模块以解码图像文件:

decodeBarcode(res, license, tmpFileName, barcodeType);

运行应用程序:

node server.js
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485