更新记录
1.0.0(2026-07-19)
首发:自研高性能原生一维条形码核心(Code128 / EAN-13 / UPC-A / EAN-8 / Code39 / Code93 / Code11 / Cod
平台兼容性
uni-app x(5.14)
| Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
| × |
× |
5.0 |
12 |
× |
× |
其他
| 多语言 |
暗黑模式 |
宽屏模式 |
蒸汽模式 |
| × |
× |
× |
√ |
nex-barcode —— 高性能一维条形码
自研高性能原生一维条形码核心(Code128 / EAN-13 / UPC-A / EAN-8 / Code39 / Code93 / Code11 / Codabar / ITF,
生成 PNG / SVG),提供 uni-app 可调的 JS API。
仅支持 App 端(Android / iOS),H5 / 小程序加载不了原生库。
同一份 utssdk 插件同时支持 uni-app x(uvue) 与 经典 uni-app(vue3),无需分叉。
全部 路径出:传 content + dest 文件路径,原生侧编码 → 渲染 → 写文件 → 返回结果。
自研核心,无额外系统依赖。与 nex-qrcode(二维码)互补。
API
| JS API |
签名 |
说明 |
generate |
generate(content, dest, symbology, height, scale): BarcodeResult |
按 symbology 码制生成一维条形码渲染为 PNG 写入 dest |
generateSvg |
generateSvg(content, dest, symbology, height, scale): BarcodeResult |
按 symbology 码制生成 SVG 写入 dest |
supportedSymbologies |
supportedSymbologies(): string[] |
返回支持的码制名(前端给用户选) |
类型
// generate / generateSvg 返回(字段 camelCase)
type BarcodeResult = { width: number; height: number; sizeBytes: number; costMs: number };
支持的码制(symbology,大小写不敏感)
| symbology |
码制 |
数据规则 |
code128 |
Code 128 |
任意可见 ASCII(自动用 Code Set B;高级用法可手动前置 À/Ɓ/Ć 选字符集) |
ean13 |
EAN-13 |
12 位数字(自动补第 13 位校验)或 13 位数字(校验已含的校验位) |
upca |
UPC-A |
EAN-13 的别名(UPC-A 即首位为 0 的 EAN-13),数据规则同 ean13 |
ean8 |
EAN-8 |
7 位数字(自动补第 8 位校验)或 8 位数字 |
code39 |
Code 39 |
大写字母 / 数字 / - . $ / + % 空格 |
code93 |
Code 93 |
同 Code39 字符集(更高密度) |
code11 |
Code 11 |
数字与 - |
codabar |
Codabar |
数字与 - $ : / . +,须以起止字母 A/B/C/D 包裹(如 A1234B) |
itf |
Interleaved 2 of 5 |
偶数位数字(物流常用) |
参数与错误
content:条码内容,为空 → InvalidParam;不符合所选码制规则(如 EAN-13 非 12/13 位、含非法字符、校验位错)→ InvalidParam,绝不闪退。
symbology:上表之一,未知 → InvalidParam。
content:编码内容字符数 ≤ 512(MAX_CONTENT_LEN),超限 → InvalidParam(模块数由内容长度决定,非固定数百)。
height:条码高度(像素),范围 1..=4096,越界 → InvalidParam。
scale:最窄条宽度(像素,即 xdim),范围 1..=20,越界 → InvalidParam。
- 像素预算:生成位图前校验
模块数 × scale × height ≤ 64,000,000(MAX_PIXEL_BUDGET),超限 → InvalidParam,杜绝巨幅 RGBA 位图 OOM。
BarcodeResult.width/height:PNG 为实际渲染像素宽高(height = 入参 height);SVG 为标称尺寸(width = 模块数 × scale、height = 入参 height)。
BarcodeResult.sizeBytes:写入文件字节数(PNG / SVG 各自的文件大小)。
BarcodeResult.costMs:只计「编码 + 渲染」处理段(毫秒,不含磁盘 IO)。
- 错误经原生层
BarcodeException(Kotlin) / BarcodeError(Swift) 抛出(Io / InvalidParam / Encode),UTS 侧透传,可 try/catch。
用法
import { generate, generateSvg, supportedSymbologies } from "@/uni_modules/nex-barcode";
// 列出支持的码制(前端下拉给用户选)
const syms = supportedSymbologies(); // ['code128','ean13','upca',...]
// 生成 Code128 PNG:高 120、最窄条 2px
const r = generate("ABC-12345", destPngPath, "code128", 120, 2);
console.log(r.width, r.height, r.sizeBytes, r.costMs);
// 生成 EAN-13 PNG:传 12 位数字,自动补校验位
const e = generate("012345678905", destPngPath, "ean13", 100, 2);
// 生成 Code39 SVG
const s = generateSvg("HELLO123", destSvgPath, "code39", 80, 2);
console.log(s.width, s.height, s.sizeBytes, s.costMs);
平台与调试边界
- 仅 app-android / app-ios;H5、各家小程序不支持。
- Android 本地真机调试需 HBuilderX ≥ 4.26(自定义调试基座),云打包不受此限。
- iOS 端含 Swift 组件,宿主原生工程需开启「支持 Swift」。
- 最终 App 打包由 HBuilderX /
@dcloudio CLI 完成。
范围说明(MVP)
- 仅生成一维条形码;条码识别/扫描(需相机/检测算法)不在本期范围。
- 暂不渲染人眼可读的数字标注(HRI 文本);如需可在前端叠加文本。