在NAS上部署Barcoed服务

360影视 国产动漫 2025-09-09 02:14 1

摘要:BWIP-JS 是一个优秀的JavaScript条形码生成库,它支持多种条形码类型,并且可以运行在Node.js环境下,非常适合用来构建你想要的API服务。

BWIP-JS 是一个优秀的JavaScript条形码生成库,它支持多种条形码类型,并且可以运行在Node.js环境下,非常适合用来构建你想要的API服务。

以下是部署步骤:

安装Node.js和npm
Armbian系统通常基于Debian,可以使用apt包管理器安装Node.js。建议安装较新版本的Node.js(如v18或更高版本)。# 更新软件包列表sudo apt update sudo apt upgrade -y # 安装Node.js和npm # 注意:默认仓库的Node.js版本可能较旧,建议使用NodeSource提供的版本 # 首先安装NodeSource的脚本(以Node.js 18.x为例) curl -fsSL HTTPS://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs # 验证安装 node --version npm --version创建项目目录并初始化# 创建一个目录来存放你的API服务 mkdir ~/Barcode-api cd ~/barcode-api # 初始化npm项目(会生成package.json文件) npm init -y安装必要的依赖
我们需要安装 bwip-js(条形码生成库)和 express(Web框架)。npm install bwip-js express创建API服务器主文件(app.js)
使用 nano 或 vim 创建一个名为 app.js 的文件。nano app.js将以下代码复制到 app.js 文件中:const express = require('express');const bwipjs = require('bwip-js');const app = express;const port = 3000; // 你可以指定其他端口,比如80(需要sudo权限)// 定义一个简单的GET路由来处理条形码生成请求// 示例URL: http://your-armbian-ip:3000/barcode?bcid=Code128&text=HelloArmbian&scale=3app.get('/barcode', (req, res) => {const { bcid, text, scale, includetext, textxalign } = req.query;// 参数验证(必选参数)if (!bcid || !text) {return res.status(400).send('Missing required parameters: "bcid" and "text"');}// 设置BWIP-JS的选项,将查询参数映射过去const options = {bcid: bcid, // 条形码类型 (e.g., 'code128', 'qrcode')text: text, // 要编码的文本scale: scale ? parseInt(scale) : 3, // 缩放比例,默认3includetext: includetext ? includetext.toLowerCase === 'true' : true, // 是否在条码下方显示文本,默认truetextxalign: textxalign || 'center', // 文本对齐方式 'center', 'left', 'right'// 更多参数请参考BWIP-JS文档: https://github.com/metafloor/bwip-js};// 尝试生成条形码try {bwipjs.toBuffer(options, (err, png) => {if (err) {console.error('Barcode generation failed:', err);res.status(500).send('Error generating barcode: ' + err.message);} else {// 设置正确的Content-Type头部res.set('Content-Type', 'image/png');// 可以设置缓存控制头部(可选)// res.set('Cache-Control', 'public, max-age=86400'); // 缓存一天res.send(png);}});} catch (error) {console.error('Unexpected error:', error);res.status(500).send('Unexpected error occurred');}});// 启动服务器app.listen(port, '0.0.0.0', => { // 监听所有网络接口,方便其他设备访问console.log(`Barcode API server running on http://0.0.0.0:${port}`);});保存并退出编辑器(在nano中按 Ctrl+X, 然后按 Y, 然后按 Enter)。(可选)使用进程管理器保持服务运行
为了避免SSH会话关闭后API服务停止,我们可以使用 pm2 这样的进程管理器。bash# 全局安装pm2 sudo npm install -g pm2 # 使用pm2启动你的API应用 pm2 start app.js --name "barcode-api" # 设置pm2开机自启(需要先运行上一命令) pm2 startup # 执行pm2提示的命令来启用开机启动 pm2 save允许防火墙端口(如果启用了防火墙)
如果你的Armbian设备启用了防火墙(如UFW),需要放行API使用的端口(例如3000)。sudo ufw allow 3000/tcp # 如果你使用的是80端口,则: # sudo ufw allow 80/tcp测试API
现在,你的API服务应该已经运行起来了。你可以在同一局域网内的另一台电脑的浏览器中测试它(将 [YOUR-ARMBIAN-IP] 替换为你的Armbian设备的IP地址):
http://[YOUR-ARMBIAN-IP]:3000/barcode?bcid=code128&text=HelloArmbian&scale=3
如果一切正常,你应该能看到一个生成的Code128条形码图片。

在你的Excel VBA编辑器中,插入一个模块并粘贴以下代码。这段代码会调用你刚刚部署在Armbian上的API,并将生成的条形码图片插入到Excel中。

Sub GenerateBarcodeFromArmbian' 定义变量Dim WinHttpReq As ObjectDim ApiUrl As StringDim BarcodeData As StringDim BarcodeType As StringDim ScaleFactor As StringDim ResponseBody As ByteDim TempFilePath As StringDim TargetCell As RangeDim ImageWidth As LongDim ImageHeight As Long' ****************** 配置区域 ******************' 设置你的Armbian设备的IP地址和端口ApiUrl = "http://192.168.1.100:3000/barcode" ' 替换为你的Armbian设备IP和端口BarcodeData = ThisWorkbook.Worksheets("Sheet1").Range("A2").Value ' 从A2单元格读取数据BarcodeType = "code128" ' 条形码类型,如 code128, code39, qrcode 等 (必须与BWIP-JS支持的bcid一致)ScaleFactor = "3" ' 缩放比例' 将图片插入到哪个单元格Set TargetCell = ThisWorkbook.Worksheets("Sheet1").Range("B2")' 设置图片显示大小 (单位: 磅)ImageWidth = 150ImageHeight = 50' If BarcodeData = "" ThenMsgBox "请在A2单元格输入要生成条形码的内容。"Exit SubEnd If' 构建完整的API请求URL (使用EncodeURL编码参数)ApiUrl = ApiUrl & "?bcid=" & BarcodeType & "&text=" & WorksheetFunction.EncodeURL(BarcodeData) & "&scale=" & ScaleFactor' 可以添加更多参数,例如 &includetext=false &textxalign=centerOn Error GoTo ErrorHandlerApplication.ScreenUpdating = False' 创建HTTP请求对象 (需要启用 Microsoft WinHTTP Services 引用)Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")WinHttpReq.Open "GET", ApiUrl, FalseWinHttpReq.Send' 检查HTTP状态码If WinHttpReq.Status = 200 Then' 获取响应体(二进制数据)ResponseBody = WinHttpReq.ResponseBody' 创建临时文件TempFilePath = Environ$("TEMP") & "\temp_barcode.png"' 写入二进制数据到临时文件Open TempFilePath For Binary Access Write As #1Put #1, , ResponseBodyClose #1' 删除可能已存在的旧图片(避免重叠)On Error Resume NextTargetCell.Parent.Pictures.Insert(TempFilePath).DeleteOn Error GoTo 0' 插入新图片并定位到目标单元格With TargetCell.Parent.Pictures.Insert(TempFilePath).Top = TargetCell.Top.Left = TargetCell.Left.Width = ImageWidth.Height = ImageHeight.Placement = xlMoveAndSize ' 图片随单元格移动和调整大小End With' (可选)删除临时文件Kill TempFilePathMsgBox "条形码生成成功!"ElseMsgBox "API请求失败! 状态码: " & WinHttpReq.Status & " : " & WinHttpReq.StatusText & vbCrLf & "请检查URL和网络连接。"End IfCleanUp:Application.ScreenUpdating = TrueSet WinHttpReq = NothingSet TargetCell = NothingExit SubErrorHandler:MsgBox "发生错误 #" & Err.Number & ": " & Err.Description, vbCriticalResume CleanUpEnd Sub

使用说明和注意事项:

启用VBA引用:在VBA编辑器中,点击 工具 -> 引用,确保勾选了 Microsoft WinHTTP Services, version 5.1。如果没有,请浏览并添加 winhttp.dll。修改配置:务必修改代码中 ApiUrl 的IP地址和端口,使其指向你的Armbian设备。参数调整:你可以根据需要修改 BarcodeType(支持的bcid如code128, code39, ean13, qrcode等,请参考BWIP-JS文档)、ScaleFactor(数字越大图片越大越清晰)以及在URL中添加其他BWIP-JS支持的参数(如height, includetext, textxalign等)。错误处理:代码中包含基本的错误处理。如果API调用失败,请检查Armbian设备的防火墙设置、Node.js服务是否正常运行,以及URL是否正确。性能:由于是通过网络请求获取图片,速度会比本地生成稍慢,但在局域网内通常很快。使用Nginx反向代理:你可以安装和配置Nginx作为反向代理,将API服务映射到80端口,甚至可以使用域名和HTTPS,使URL更简洁安全。更多API功能:你可以扩展 app.js,添加更多路由、支持更多参数、添加认证中间件(如果需要限制访问)、记录请求日志等功能。错误响应的JSON格式化:目前错误时返回的是文本,你也可以修改API,在出错时返回JSON格式的错误信息,便于VBA解析。批量生成:VBA代码可以很容易地放入循环中,遍历一个单元格区域,为每个单元格的值生成一个条形码并插入到相邻单元格。

希望这个详细的方案能帮助你在Armbian上成功部署条形码API并通过VBA调用!

来源:走进科技生活

相关推荐