百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

在NAS上部署Barcode服务_nas basic

haoteby 2025-10-23 02:21 3 浏览

部署基于BWIP-JS的条形码生成API

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

以下是部署步骤:

  1. 安装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
  1. 创建项目目录并初始化
# 创建一个目录来存放你的API服务 
mkdir ~/barcode-api 
cd ~/barcode-api 
# 初始化npm项目(会生成package.json文件) 
npm init -y
  1. 安装必要的依赖
    我们需要安装 bwip-js(条形码生成库)和 express(Web框架)。
npm install bwip-js express
  1. 创建API服务器主文件(app.js)
    使用 nanovim 创建一个名为 app.js 的文件。
nano app.js
  1. 将以下代码复制到 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=3
app.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, // 缩放比例,默认3
        includetext: includetext ? includetext.toLowerCase() === 'true' : true, // 是否在条码下方显示文本,默认true
        textxalign: 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}`);
});
  1. 保存并退出编辑器(在nano中按 Ctrl+X, 然后按 Y, 然后按 Enter)。
  2. (可选)使用进程管理器保持服务运行
    为了避免SSH会话关闭后API服务停止,我们可以使用 pm2 这样的进程管理器。
# 全局安装
pm2 sudo npm install -g pm2 
# 使用pm2启动你的API应用 
pm2 start app.js --name "barcode-api" 
# 设置pm2开机自启(需要先运行上一命令) 
pm2 startup 
# 执行pm2提示的命令来启用开机启动 
pm2 save
  1. 允许防火墙端口(如果启用了防火墙)
    如果你的Armbian设备启用了防火墙(如UFW),需要放行API使用的端口(例如3000)。
sudo ufw allow 3000/tcp # 如果你使用的是80端口,则: # sudo ufw allow 80/tcp
  1. 测试API
    现在,API服务应该已经运行起来了。可以在同一局域网内的另一台电脑的浏览器中测试它(将 [YOUR-ARMBIAN-IP] 替换为你的Armbian设备的IP地址):
    http://[YOUR-ARMBIAN-IP]:3000/barcode?bcid=code128&text=HelloArmbian&scale=3
    如果一切正常,就应该能看到一个生成的Code128条形码图片。

VBA调用代码示例

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

vba

Sub GenerateBarcodeFromArmbian()
    ' 定义变量
    Dim WinHttpReq As Object
    Dim ApiUrl As String
    Dim BarcodeData As String
    Dim BarcodeType As String
    Dim ScaleFactor As String
    Dim ResponseBody() As Byte
    Dim TempFilePath As String
    Dim TargetCell As Range
    Dim ImageWidth As Long
    Dim 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 = 150
    ImageHeight = 50
    ' **********************************************

    If BarcodeData = "" Then
        MsgBox "请在A2单元格输入要生成条形码的内容。"
        Exit Sub
    End If

    ' 构建完整的API请求URL (使用EncodeURL编码参数)
    ApiUrl = ApiUrl & "?bcid=" & BarcodeType & "&text=" & WorksheetFunction.EncodeURL(BarcodeData) & "&scale=" & ScaleFactor
    ' 可以添加更多参数,例如 &includetext=false &textxalign=center

    On Error GoTo ErrorHandler
    Application.ScreenUpdating = False

    ' 创建HTTP请求对象 (需要启用 Microsoft WinHTTP Services 引用)
    Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
    WinHttpReq.Open "GET", ApiUrl, False
    WinHttpReq.Send

    ' 检查HTTP状态码
    If WinHttpReq.Status = 200 Then
        ' 获取响应体(二进制数据)
        ResponseBody = WinHttpReq.ResponseBody

        ' 创建临时文件
        TempFilePath = Environ$("TEMP") & "\temp_barcode.png"
        ' 写入二进制数据到临时文件
        Open TempFilePath For Binary Access Write As #1
        Put #1, , ResponseBody
        Close #1

        ' 删除可能已存在的旧图片(避免重叠)
        On Error Resume Next
        TargetCell.Parent.Pictures.Insert(TempFilePath).Delete
        On Error GoTo 0

        ' 插入新图片并定位到目标单元格
        With TargetCell.Parent.Pictures.Insert(TempFilePath)
            .Top = TargetCell.Top
            .Left = TargetCell.Left
            .Width = ImageWidth
            .Height = ImageHeight
            .Placement = xlMoveAndSize ' 图片随单元格移动和调整大小
        End With

        ' (可选)删除临时文件
        Kill TempFilePath

        MsgBox "条形码生成成功!"
    Else
        MsgBox "API请求失败! 状态码: " & WinHttpReq.Status & " : " & WinHttpReq.StatusText & vbCrLf & "请检查URL和网络连接。"
    End If

CleanUp:
    Application.ScreenUpdating = True
    Set WinHttpReq = Nothing
    Set TargetCell = Nothing
    Exit Sub

ErrorHandler:
    MsgBox "发生错误 #" & Err.Number & ": " & Err.Description, vbCritical
    Resume CleanUp
End Sub

使用说明和注意事项:

  1. 启用VBA引用:在VBA编辑器中,点击 工具 -> 引用,确保勾选了 Microsoft WinHTTP Services, version 5.1。如果没有,请浏览并添加 winhttp.dll
  2. 修改配置:务必修改代码中 ApiUrl 的IP地址和端口,使其指向你的Armbian设备。
  3. 参数调整:可以根据需要修改 BarcodeType(支持的bcid如code128, code39, ean13, qrcode等,请参考BWIP-JS文档)、ScaleFactor(数字越大图片越大越清晰)以及在URL中添加其他BWIP-JS支持的参数(如height, includetext, textxalign等)。
  4. 错误处理:代码中包含基本的错误处理。如果API调用失败,请检查Armbian设备的防火墙设置、Node.js服务是否正常运行,以及URL是否正确。
  5. 性能:由于是通过网络请求获取图片,速度会比本地生成稍慢,但在局域网内通常很快。

其他考虑和增强建议

  • 使用Nginx反向代理:可以安装和配置Nginx作为反向代理,将API服务映射到80端口,甚至可以使用域名和HTTPS,使URL更简洁安全。
  • 更多API功能:可以扩展 app.js,添加更多路由、支持更多参数、添加认证中间件(如果需要限制访问)、记录请求日志等功能。
  • 错误响应的JSON格式化:目前错误时返回的是文本,也可以修改API,在出错时返回JSON格式的错误信息,便于VBA解析。
  • 批量生成:VBA代码可以很容易地放入循环中,遍历一个单元格区域,为每个单元格的值生成一个条形码并插入到相邻单元格。

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

相关推荐

统统都能轻松装下。_如何安装统赢

今天必须来好好聊聊迈腾甄选款的外观升级优势,简直是把经典与时尚玩明白了!迈腾甄选款巧妙地保留了迈腾的经典气场和造型,就像一位历经岁月沉淀却风采依旧的绅士。2871mm的超长轴距搭配超短前后悬设计,这就...

麒麟操作系统常见问题:打开火狐浏览器提示没有安装flash插件

关键词:火狐浏览器、flash、插件、安装问题类型:...

VS Code 新手必装插件清单_vs code 安装插件

以下是针对VSCode新手的必装插件清单,覆盖代码编辑、效率提升、美化等核心需求,适用于大多数开发场景:一、基础必备插件Chinese(Simplified)(简体中文)功能:将VSC...

开源JSON可视神器,让阅读JSON变得简单!-JSONHero

众所周知,现在有不少代码编辑器以及在线工具,都支持JSON格式化,因此这一特性,已经不能称的上是亮点。调试工具已经成为每个开发者不可或缺的“利器”。但是,你见过能直接可视化JSON数据,把整个...

在NAS上部署Barcode服务_nas basic

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

详细介绍一下Python如何对JSON格式数据进行处理?

在Python中对于JSON数据的处理是在日常开发中的常见需求之一。通常情况下,对JSON数据的处理主要涉及到如下的的几个步骤对于JSON数据的解析操作对于JSON数据的处理操作对于JSON数据的格式...

golang2021数据格式(69)Go语言将结构体数据保存为JSON格式数据

JSON格式是一种对象文本格式,是当前互联网最常用的信息交换格式之一。在Go语言中,可以使用json.Marshal()函数将结构体格式的数据格式化为JSON格式。想要使用json...

一个vsCode格式化插件_vscode 格式化文档

ESlint...

自己抓取家中IPTV组播地址,不用交换机或多网卡,远程抓取更方便

通过IPTV播放应用在电视、电脑或者手机观看家中的IPTV电视直播,可以摆脱IPTV机顶盒的限制,方便在家中多台电视或者手机电脑上观看IPTV电视直播。运营商IPTV的电视直播信号稳定、高清,和互联网...

扣子免费系列教程, 如何使用扣子(coze)对接飞书多维表格?

一、说明大家都知道使用扣子(coze)把一些文本内容转为小红书风格很方便。但每次都是复制粘贴。很麻烦那能不能批量呢?今天我们就来学习下,使用扣子(coze)平台完成内容的批量转换。基本思路是读取飞书多...

1024程序员节 花了三个小时调试 集合近50种常用小工具 开源项目

开篇1024是程序员节了,本来我说看个开源项目花半个小时调试之前看的一个不错的开源项目,一个日常开发常常使用的工具集,结果花了我三个小时,开源作者的开源项目中缺少一些文件,我一个个在网上找的,好多坑...

办公人必看!3分钟搞定JSON/XML/Markdown,格式转换竟如此简单!

你是不是也遇到过这些情况:领导突然甩来一份密密麻麻的数据文件,要你半小时内整理成报表;想写技术文档,却被Markdown的语法搞得头大;或者同事发来的JSON文件,打开全是“{”“}”“,”,看得眼花...

开发者必备!zerotools.top全栈效率神器

强烈建议开发者们收藏https://zerotools.top,用它来提升日常效率。一、功能覆盖:从数据到图像的全栈支持Zerotools.top的最大亮点,是其功能维度的完整性。根据最新页面...

15 个非常好用的 JSON 工具_json tools

JSON(JavaScriptObjectNotation)是一种流行的数据交换格式,已经成为许多应用程序中常用的标准。无论您是开发Web应用程序,构建API,还是处理数据,使用JSON工具可以大...

C#.NET Newtonsoft.Json 详解_c# jsonresult

简介Newtonsoft.Json(又称...