本文目录导读:

我来详细介绍条形码生成的实现方法,包括不同技术的方案。
条形码类型概述
常见条形码类型:
- EAN-13:零售商品(中国商品条码)
- Code 128:物流、工业领域
- Code 39:工业、医疗
- QR Code:二维码(实际是二维条码)
- UPC-A:美国零售商品
前端实现方案
使用 JavaScript 库
JsBarcode(最常用)
// 安装
npm install jsbarcode
// 基础使用
import JsBarcode from 'jsbarcode';
// 直接生成在 canvas 或 SVG 上
JsBarcode("#barcode", "123456789012", {
format: "EAN13", // 条形码类型
width: 2, // 条宽
height: 100, // 高度
displayValue: true, // 显示数字
fontSize: 20,
margin: 10
});
使用 HTML Canvas 生成
<canvas id="barcode"></canvas>
<script>
const canvas = document.getElementById('barcode');
JsBarcode(canvas, "123456789012", {
format: "CODE128"
});
</script>
生成 SVG 格式
// 直接生成 SVG 字符串
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
JsBarcode(svg, "ABC123", {
format: "CODE39"
});
document.body.appendChild(svg);
后端实现方案
Python - python-barcode
# 安装
pip install python-barcode
# 生成条形码
import barcode
from barcode.writer import ImageWriter
# 选择格式
EAN = barcode.get_barcode_class('ean13')
ean = EAN('123456789012', writer=ImageWriter())
# 保存为图片
ean.save('my_barcode') # 生成 PNG 图片
# SVG 格式
ean_svg = EAN('123456789012')
ean_svg.save('my_barcode_svg')
Node.js - bwip-js
// 安装
npm install bwip-js
// 生成
const bwipjs = require('bwip-js');
bwipjs.toBuffer({
bcid: 'code128', // 条形码类型
text: '12345678', // 编码内容
scale: 3, // 缩放
height: 10, // 高度 (毫米)
includetext: true, // 显示文字
textxalign: 'center' // 文字对齐
}, (err, png) => {
if (err) throw err;
// png 是 Buffer
fs.writeFileSync('barcode.png', png);
});
Java - ZXing (Zebra Crossing)
// Maven 依赖
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.5.1</version>
</dependency>
// 生成代码
import com.google.zxing.BarcodeFormat;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.oned.Code128Writer;
int width = 300;
int height = 100;
Code128Writer writer = new Code128Writer();
BitMatrix matrix = writer.encode(
"12345678",
BarcodeFormat.CODE_128,
width,
height
);
// 输出为图片
Path path = Paths.get("barcode.png");
MatrixToImageWriter.writeToPath(matrix, "PNG", path);
在线 API 方案
使用第三方 API
// HTTP API 调用
fetch('https://api.barcodelookup.com/v3/products?barcode=123456789012&key=YOUR_API_KEY')
.then(response => response.json())
.then(data => console.log(data));
自建 API 服务
# Flask + python-barcode
from flask import Flask, send_file
import barcode
from barcode.writer import ImageWriter
import io
app = Flask(__name__)
@app.route('/barcode/<code>')
def generate_barcode(code):
# 生成条形码
EAN = barcode.get_barcode_class('ean13')
ean = EAN(code, writer=ImageWriter())
# 保存到内存
buffer = io.BytesIO()
ean.write(buffer)
buffer.seek(0)
return send_file(buffer, mimetype='image/png')
if __name__ == '__main__':
app.run()
数据库与批量生成
数据库存储
-- 存储条形码图片路径
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(100),
barcode VARCHAR(13),
barcode_image_path VARCHAR(255)
);
-- 直接存储 Base64
CREATE TABLE products_barcode (
id INT PRIMARY KEY,
name VARCHAR(100),
barcode_base64 TEXT
);
批量生成示例(Python)
import barcode
from barcode.writer import ImageWriter
import os
from concurrent.futures import ThreadPoolExecutor
def generate_barcode(code, output_dir):
"""生成单个条形码"""
EAN = barcode.get_barcode_class('ean13')
ean = EAN(code, writer=ImageWriter())
filename = os.path.join(output_dir, f'{code}.png')
ean.save(filename)
return filename
# 批量生成
codes = ['123456789012', '234567890123', '345678901234']
with ThreadPoolExecutor(max_workers=4) as executor:
futures = [
executor.submit(generate_barcode, code, 'barcodes/')
for code in codes
]
for future in futures:
print(f'Generated: {future.result()}')
前端实时展示(Vue.js 示例)
<template>
<div>
<canvas ref="barcode"></canvas>
</div>
</template>
<script>
import JsBarcode from 'jsbarcode';
export default {
props: {
value: String,
format: {
type: String,
default: 'CODE128'
}
},
watch: {
value: {
immediate: true,
handler(newVal) {
this.$nextTick(() => {
JsBarcode(this.$refs.barcode, newVal, {
format: this.format,
width: 2,
height: 100,
displayValue: true
});
});
}
}
}
};
</script>
注意事项
- 校验码:EAN-13 等格式会自动计算校验位长度**:不同格式有不同限制
- 分辨率:打印时需要 300dpi 以上
- 颜色:条码必须是深色,背景浅色
- 留白区:条形码两侧需要足够的空白区域
建议方案选择
- 前端简单需求:JsBarcode(HTML/Canvas/SVG)
- 后端批量生成:python-barcode + Flask API
- 跨平台项目:ZXing(Java/Android)
- 高性能需求:libdmtx(C++)
- 在线服务:BarcodeLookup API
选择方案时需考虑:开发语言、性能需求、部署环境和是否需要离线生成。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播