本文目录导读:

我来介绍几种在Python中生成条形码的方法:
使用 python-barcode 库(推荐)
安装
pip install python-barcode
基本使用
from barcode import EAN13, Code128, Code39
from barcode.writer import ImageWriter
# 1. 生成EAN-13条形码
def generate_ean13():
# EAN-13需要13位数字,最后一位是校验码
code = '5901234123457'
ean = EAN13(code, writer=ImageWriter())
ean.save('ean13_barcode')
print("EAN-13条形码已生成")
# 2. 生成Code128条形码
def generate_code128():
from barcode import Code128
code = 'ABC-1234-DEFG'
code128 = Code128(code, writer=ImageWriter())
code128.save('code128_barcode')
print("Code128条形码已生成")
# 3. 生成Code39条形码
def generate_code39():
code = 'HELLO123'
code39 = Code39(code, writer=ImageWriter())
code39.save('code39_barcode')
print("Code39条形码已生成")
# 4. 完整示例:批量生成
def batch_generate():
codes = [
('123456789012', 'product_1'), # (条形码数据, 文件名)
('987654321098', 'product_2'),
('ABC-567', 'product_3')
]
for code_data, filename in codes:
try:
if code_data.isdigit() and len(code_data) == 12:
# EAN-13自动添加校验码
from barcode import EAN13
barcode = EAN13(code_data, writer=ImageWriter())
else:
# 使用Code128支持字母和数字
from barcode import Code128
barcode = Code128(code_data, writer=ImageWriter())
barcode.save(filename)
print(f"已生成: {filename}.png")
except Exception as e:
print(f"生成 {code_data} 失败: {e}")
带自定义样式的条形码
from barcode import Code128
from barcode.writer import ImageWriter
from PIL import Image, ImageDraw, ImageFont
def generate_styled_barcode():
# 自定义样式
options = {
'module_width': 0.2, # 模块宽度
'module_height': 15.0, # 模块高度
'quiet_zone': 6.5, # 静区
'font_size': 10, # 字体大小
'text_distance': 5.0, # 文字距离
'background': 'white', # 背景色
'foreground': 'black', # 前景色
'write_text': True, # 是否写入文字
'center_text': True, # 文字居中
}
writer = ImageWriter()
code = 'PRODUCT-001'
barcode = Code128(code, writer=writer)
# 生成并保存
barcode.save('styled_barcode', options=options)
# 添加额外信息
img = Image.open('styled_barcode.png')
draw = ImageDraw.Draw(img)
# 在条形码下方添加价格信息
draw.text((50, 130), 'Price: $19.99', fill='black')
img.save('styled_barcode_with_price.png')
print("带样式的条形码已生成")
使用 pyqrcode + 条形码
import tempfile
from barcode import Code128
from barcode.writer import ImageWriter
from PIL import Image
def create_barcode_with_logo():
# 生成条形码
code = 'QRCODE-123'
writer = ImageWriter()
barcode = Code128(code, writer=writer)
# 保存到临时文件
temp_file = tempfile.NamedTemporaryFile(suffix='.png', delete=False)
barcode.write(temp_file, {
'module_width': 0.3,
'module_height': 20.0,
})
# 可以在这里添加logo或其他元素
print("条形码已生成")
生成PDF格式的条形码
from barcode import Code128
from barcode.writer import SVGWriter
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
def generate_pdf_with_barcode():
from io import BytesIO
# 生成SVG格式条形码
code = 'INVOICE-2024-001'
writer = SVGWriter()
barcode = Code128(code, writer=writer)
# 将条形码保存为SVG字符串
svg_data = barcode.render()
# 创建PDF
c = canvas.Canvas("barcode_invoice.pdf", pagesize=A4)
width, height = A4
# 添加标题
c.setFont("Helvetica-Bold", 16)
c.drawString(50, height - 50, "Invoice #2024-001")
# 添加条形码(需要将SVG转换为图像)
# 这里简化处理,直接使用PNG
barcode_png = Code128(code, writer=ImageWriter())
barcode_png.save('temp_barcode')
c.drawImage('temp_barcode.png', 50, height - 150, width=200, height=100)
# 添加其他内容
c.setFont("Helvetica", 12)
c.drawString(50, height - 200, "Product: Sample Item")
c.drawString(50, height - 220, "Price: $99.99")
c.drawString(50, height - 240, "Date: 2024-01-15")
c.save()
print("PDF已生成")
完整示例:商品条形码生成系统
import os
import datetime
from barcode import Code128, EAN13
from barcode.writer import ImageWriter
from PIL import Image, ImageDraw, ImageFont
class BarcodeGenerator:
def __init__(self, output_dir='barcodes'):
self.output_dir = output_dir
if not os.path.exists(output_dir):
os.makedirs(output_dir)
def generate_product_barcode(self, product_id, product_name, price):
"""生成商品条形码"""
# 创建输出文件名
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"{product_name}_{timestamp}"
filepath = os.path.join(self.output_dir, filename)
# 生成条形码
writer = ImageWriter()
# 根据产品ID长度选择编码方式
if len(product_id) == 12 and product_id.isdigit():
barcode = EAN13(product_id, writer=writer)
else:
barcode = Code128(product_id, writer=writer)
# 保存条形码
barcode.save(filepath, {
'module_width': 0.2,
'module_height': 20.0,
'font_size': 12,
'text_distance': 5,
})
# 添加商品信息
img = Image.open(f"{filepath}.png")
draw = ImageDraw.Draw(img)
# 可以在这里添加字体
try:
font = ImageFont.truetype("arial.ttf", 12)
except:
font = ImageFont.load_default()
# 添加商品信息
draw.text((10, img.height - 20), f"ID: {product_id}", fill='black', font=font)
draw.text((10, img.height - 35), f"Price: ${price:.2f}", fill='black', font=font)
# 保存最终图像
img.save(f"{filepath}_final.png")
return f"{filepath}_final.png"
def batch_generation(self, products):
"""批量生成条形码"""
results = []
for product in products:
try:
result = self.generate_product_barcode(
product['id'],
product['name'],
product['price']
)
results.append({
'product': product['name'],
'file': result,
'status': 'success'
})
except Exception as e:
results.append({
'product': product['name'],
'error': str(e),
'status': 'failed'
})
return results
# 使用示例
if __name__ == "__main__":
# 创建生成器
generator = BarcodeGenerator()
# 单个商品
barcode_file = generator.generate_product_barcode(
'PROD-2024-001',
'SampleProduct',
29.99
)
print(f"条形码已生成: {barcode_file}")
# 批量生成
products = [
{'id': 'PROD-001', 'name': 'Laptop', 'price': 999.99},
{'id': 'PROD-002', 'name': 'Mouse', 'price': 29.99},
{'id': 'PROD-003', 'name': 'Keyboard', 'price': 79.99},
]
results = generator.batch_generation(products)
for result in results:
print(f"{result['product']}: {result['status']}")
if result['status'] == 'success':
print(f" 文件: {result['file']}")
注意事项
-
选择合适的编码类型:
- EAN-13:商品零售,13位数字
- Code128:最通用,支持所有ASCII字符
- Code39:支持字母数字
-
条形码验证:
def validate_barcode(code, barcode_type='EAN13'): if barcode_type == 'EAN13': if len(code) != 13 or not code.isdigit(): return False # 校验码验证 # ... return True -
输出格式选择:
- PNG:图像格式,适合打印
- SVG:矢量格式,适合网页
- PDF:适合文档整合
这些方法能满足大部分条形码生成需求,根据具体使用场景选择合适的库和参数即可。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播