이 기사에서는 Dynamsoft Barcode Reader SDK를 캡슐화하고 Windows, Linux 및 OS X를 지원하는 사용자 정의 Node 모듈을 구축하는 매우 간단한 방법을 보여주고, 이를 통합하는 방법을 보여줍니다. 모듈은 온라인 바코드를 구현합니다. 독서신청.
복잡한 서버 측 웹 애플리케이션을 개발하기 위해 JavaScript를 사용하는 것이 점점 더 편리해지고 있기 때문에 점점 더 많은 웹 개발자가 웹 사이트 구축을 위해 Node를 선택하고 있습니다. 다양한 플랫폼에서 Node의 기능을 확장하기 위해 Node를 사용하면 개발자는 C/C++를 사용하여 확장 기능을 만들 수 있습니다.
소개
Dynamsoft Barcode Reader는 Windows, Linux 및 OS X용 바코드 구문 분석을 위한 C/C++ 공유 라이브러리를 제공합니다. 가장 큰 장점은 C/C++ API를 확장으로 캡슐화할 수 있는 한 JavaScript, Python, Java, Ruby, PHP 등을 포함한 다양한 고급 프로그래밍 언어에 적합하다는 것입니다. 사용된. 프로그래밍 언어에 관계없이 바코드를 구문 분석하는 데는 몇 줄의 코드만 있으면 됩니다.
1D/2D 바코드 유형 지원
Code 39, Code 93, Code 128, Codabar, Interleaved 2 of 5, EAN-8, EAN-13, UPC- A, UPC-E,Industrial 2/5
QRCode
DataMatrix
PDF417
지원되는 이미지 유형
BMP, JPEG, PNG, GIF , TIFF, PDF
런타임 환경
Windows, Linux 및 Mac
Node v5.5.0
Node.js 바코드 확장
Node.js는 C/C++로 작성된 동적으로 연결된 공유 객체를 확장합니다. 이 기술을 접해본 적이 없다면 공식 튜토리얼을 읽어보세요.
확장 프로그램 만들기
dbr.cc라는 파일을 만들고 DecodeFile 메서드를 추가합니다.
#include#include#include "If_DBR.h" #include "BarcodeFormat.h" #include "BarcodeStructs.h" #include "ErrorCode.h" using namespace v8; void DecodeFile(const FunctionCallbackInfo& args) { } void Init(Handleexports) { NODE_SET_METHOD(exports, "decodeFile", DecodeFile); } NODE_MODULE(dbr, Init)
Parse 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(); Localcb = Local::Cast(args[3]);
바코드 이미지를 구문 분석합니다.
int iMaxCount = 0x7FFFFFFF; ReaderOptions ro = {0}; pBarcodeResultArray pResults = NULL; ro.llBarcodeFormat = llFormat; ro.iMaxBarcodesNumPerPage = iMaxCount; DBR_InitLicense(pszLicense); // Decode barcode image int ret = DBR_DecodeFile(pFileName, &ro, &pResults);
이 변환됩니다. 바코드를 문자열로:
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"; }
결과를 v8 객체로 변환:
LocalbarcodeResults = Array::New(isolate); for (int i = 0; i < count; i++) { tmp = ppBarcodes[i]; Localresult = Object::New(isolate); result->Set(String::NewFromUtf8(isolate, "format"), String::NewFromUtf8(isolate, GetFormatStr(tmp->llFormat))); result->Set(String::NewFromUtf8(isolate, "value"), String::NewFromUtf8(isolate, tmp->pBarcodeData)); barcodeResults->Set(Number::New(isolate, i), result); }
빌드 확장
요구 사항:
Windows: Windows용 DBR, Visual Studio 및 Python v2.7이 설치되어 있어야 합니다.
Linux: 설치 Linux용 DBR.
Mac: Mac 및 Xcode용 DBR을 설치합니다.
node-gyp 설치:
npm install -g node-gyp
만들기 다중 플랫폼 컴파일을 위한 바인딩.gyp:
{ "targets": [ { 'target_name': "dbr", 'sources': [ "dbr.cc" ], 'conditions': [ ['OS=="linux"', { 'defines': [ 'LINUX_DBR', ], 'include_dirs': [ "/home/xiao/Dynamsoft/BarcodeReader4.0/Include" ], 'libraries': [ "-lDynamsoftBarcodeReaderx64", "-L/home/xiao/Dynamsoft/BarcodeReader4.0/Redist" ], 'copies': [ { 'destination': 'build/Release/', 'files': [ '/home/xiao/Dynamsoft/BarcodeReader4.0/Redist/libDynamsoftBarcodeReaderx64.so' ] }] }], ['OS=="win"', { 'defines': [ 'WINDOWS_DBR', ], 'include_dirs': [ "F:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Include" ], 'libraries': [ "-lF:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Lib/DBRx64.lib" ], 'copies': [ { 'destination': 'build/Release/', 'files': [ 'F:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Redist/DynamsoftBarcodeReaderx64.dll' ] }] }], ['OS=="mac"', { 'defines': [ 'MAC_DBR', ], 'include_dirs' : [ "/Applications/Dynamsoft/Barcode/ Reader/ 4.1/Include" ], 'libraries': [ "-lDynamsoftBarcodeReader" ] }] ] } ] }
DRB 설치 디렉터리를 컴퓨터의 실제 디렉터리로 바꿉니다.
빌드 환경 구성:
node-gyp 구성
Mac에서는 다음 오류가 발생합니다.
오류: xcode-select: 오류: 도구 'xcodebuild'에는 Xcode가 필요하지만 활성 개발자 디렉토리 '/Library/Developer/CommandLineTools'는 명령줄 도구 인스턴스입니다
해결책은 다음과 같습니다.
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
빌드 프로젝트:
node-gyp 빌드
온라인 바코드 구문 분석
Node의 바코드 구문 분석 모듈을 성공적으로 구축했으며 이제 간단한 바코드 판독 애플리케이션을 만들 수 있습니다.
Express 및 Formidable 설치:
npm install express
npm install formidable
Express를 사용하여 간단한 애플리케이션 만들기:
var formidable = require('formidable'); var util = require('util'); var express = require('express'); var fs = require('fs'); var app = express(); var path = require('path'); var dbr = require('./build/Release/dbr'); var http = require('http'); fs.readFile('./license.txt', 'utf8', function(err, data) { app.use(express.static(__dirname)); app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, OPTIONS"); res.header("Access-Control-Allow-Headers", "X-Requested-With, content-type"); res.header("Access-Control-Allow-Credentials", true); next(); }); var server = app.listen(2016, function() { var host = server.address().address; var port = server.address().port; console.log('listening at http://%s:%s', host, port); }); });
Formidable을 사용하여 양식에서 이미지 데이터를 추출합니다.
app.post('/upload', function(req, res) { var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files) { var dir = 'uploads'; fs.mkdir(dir, function(err) { var flag = fields.uploadFlag; var barcodeType = parseInt(fields.barcodetype); console.log('flag: ' + flag); if (flag === '1') { // read barcode image file fs.readFile(files.fileToUpload.path, function(err, data) { // save file from temp dir to new dir var fileName = path.join(__dirname, dir, files.fileToUpload.name); console.log(fileName); fs.writeFile(fileName, data, function(err) { if (err) throw err; }); }); } else { // read barcode image url var tmpFileName = path.join(__dirname, dir, 'tmp.jpg'); var tmp = fs.createWriteStream(tmpFileName); var url = fields.fileToDownload; console.log('url: ' + url); http.get(url, function(response) { response.pipe(tmp); tmp.on('finish', function() { tmp.close(function() { }); }); }); } }); }); });
바코드 모듈을 가져와 이미지 파일을 구문 분석합니다.
decodeBarcode(res, 라이센스, tmpFileName, 바코드 유형);
애플리케이션 실행:
node server.js
접속 http: //localhost:2016/index.htm:
위는 편집자가 소개한 Node.js 바코드 인식 프로그램 구축 아이디어에 대한 자세한 설명입니다. 모든 사람.
【관련 추천 튜토리얼】
1. JavaScript 동영상 튜토리얼
2. JavaScript 온라인 매뉴얼
3. 부트스트랩 튜토리얼