Python条形码生成案例如何生成条码

wen python案例 28

本文目录导读:

Python条形码生成案例如何生成条码

  1. 使用 python-barcode 库(推荐)
  2. 使用 qrcode 生成二维码
  3. 生成多个条形码并保存为PDF
  4. 批量生成商品条形码(实战案例)
  5. 生成带背景的条形码标签
  6. 支持的条形码类型
  7. 注意事项

我来为您介绍几种Python生成条形码的方法和案例。

使用 python-barcode 库(推荐)

安装

pip install python-barcode pillow

EAN-13 条形码生成

from barcode import EAN13
from barcode.writer import ImageWriter
# 生成EAN-13条形码(13位数字)
ean = EAN13("123456789012", writer=ImageWriter())
ean.save("ean13_barcode")
print("EAN-13条形码已生成: ean13_barcode.png")

Code128 条形码(支持文本)

from barcode import Code128
from barcode.writer import ImageWriter
# 生成Code128条形码(支持数字和字母)
code128 = Code128("ABC123456", writer=ImageWriter())
code128.save("code128_barcode")
print("Code128条形码已生成: code128_barcode.png")

自定义条形码样式

from barcode import Code39
from barcode.writer import ImageWriter
# 自定义输出参数
options = {
    'module_width': 0.3,      # 条码宽度
    'module_height': 15.0,    # 条码高度
    'font_size': 12,          # 字体大小
    'text_distance': 5.0,     # 文字距离
    'quiet_zone': 6.0,        # 静区
    'background': 'white',    # 背景颜色
    'foreground': 'black',    # 前景颜色
}
code39 = Code39("HELLO123", writer=ImageWriter())
# 生成SVG格式
code39.save("custom_barcode", options=options)
print("自定义条形码已生成")

使用 qrcode 生成二维码

import qrcode
from qrcode.image.styledpil import StyledPilImage
from qrcode.image.styles.moduledrawers import RoundedModuleDrawer
# 生成基本二维码
data = "https://www.example.com"
qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_H,
    box_size=10,
    border=4,
)
qr.add_data(data)
qr.make(fit=True)
# 生成图像
img = qr.make_image(fill_color="black", back_color="white")
img.save("basic_qrcode.png")
# 生成带样式的二维码
qr_styled = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=10,
    border=4,
)
qr_styled.add_data(data)
qr_styled.make(fit=True)
img_styled = qr_styled.make_image(
    image_factory=StyledPilImage,
    module_drawer=RoundedModuleDrawer()
)
img_styled.save("styled_qrcode.png")
print("二维码已生成")

生成多个条形码并保存为PDF

from barcode import EAN13, Code128
from barcode.writer import ImageWriter
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from PIL import Image
import os
def generate_barcodes_to_pdf():
    # 生成条形码列表
    barcodes_data = [
        ("EAN13", "123456789012"),
        ("Code128", "PROD001"),
        ("Code128", "PROD002"),
    ]
    barcode_images = []
    for idx, (barcode_type, data) in enumerate(barcodes_data):
        # 创建条形码
        if barcode_type == "EAN13":
            barcode = EAN13(data, writer=ImageWriter())
        else:
            barcode = Code128(data, writer=ImageWriter())
        filename = f"temp_barcode_{idx}"
        barcode.save(filename)
        barcode_images.append(f"{filename}.png")
        print(f"生成了 {barcode_type} 条形码: {data}")
    # 创建PDF
    c = canvas.Canvas("barcodes_catalog.pdf", pagesize=A4)
    width, height = A4
    y_position = height - 50
    for i, img_file in enumerate(barcode_images):
        if y_position < 100:
            c.showPage()
            y_position = height - 50
        c.drawImage(img_file, 50, y_position - 50, width=200, height=80)
        y_position -= 120
    c.save()
    # 清理临时文件
    for img_file in barcode_images:
        if os.path.exists(img_file):
            os.remove(img_file)
    print("PDF已生成: barcodes_catalog.pdf")
generate_barcodes_to_pdf()

批量生成商品条形码(实战案例)

from barcode import EAN13
from barcode.writer import ImageWriter
import pandas as pd
import os
class BarcodeGenerator:
    def __init__(self, output_dir="generated_barcodes"):
        self.output_dir = output_dir
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)
    def generate_ean13(self, product_id, save=True):
        """生成单个EAN-13条形码"""
        # EAN-13需要13位数字,补足位数
        ean_code = str(product_id).zfill(12) + "0"  # 最后一位是校验位
        ean = EAN13(ean_code, writer=ImageWriter())
        if save:
            filename = os.path.join(self.output_dir, f"product_{product_id}")
            ean.save(filename)
            return f"{filename}.png"
        return ean
    def batch_generate_from_csv(self, csv_file):
        """从CSV文件批量生成条形码"""
        df = pd.read_csv(csv_file)
        results = []
        for _, row in df.iterrows():
            product_id = row.get('product_id')
            product_name = row.get('product_name', f"Product_{product_id}")
            if product_id:
                filename = self.generate_ean13(product_id)
                results.append({
                    'product_id': product_id,
                    'product_name': product_name,
                    'barcode_file': filename
                })
                print(f"生成条形码: {product_name} -> {filename}")
        return pd.DataFrame(results)
    def generate_inventory_labels(self, products):
        """生成库存标签"""
        labels = []
        for product in products:
            barcode = self.generate_ean13(product['id'], save=False)
            labels.append({
                'name': product['name'],
                'barcode': barcode,
                'price': product.get('price', 0)
            })
        return labels
# 使用示例
generator = BarcodeGenerator()
# 批量生成
products_data = [
    {'id': 1001, 'name': '商品A', 'price': 29.99},
    {'id': 1002, 'name': '商品B', 'price': 39.99},
    {'id': 1003, 'name': '商品C', 'price': 49.99},
]
labels = generator.generate_inventory_labels(products_data)
for label in labels:
    print(f"商品: {label['name']}, 价格: {label['price']}")

生成带背景的条形码标签

from barcode import Code128
from barcode.writer import ImageWriter
from PIL import Image, ImageDraw, ImageFont
def create_label_with_barcode(product_name, price, barcode_data, output_file):
    """创建带条形码的商品标签"""
    # 生成条形码
    code128 = Code128(barcode_data, writer=ImageWriter())
    barcode_img = code128.render(writer_options={
        'module_width': 0.4,
        'module_height': 10,
        'font_size': 10,
        'text_distance': 2,
        'quiet_zone': 4,
    })
    # 创建标签背景
    label_width = 400
    label_height = 300
    label = Image.new('RGB', (label_width, label_height), 'white')
    draw = ImageDraw.Draw(label)
    # 添加边框
    draw.rectangle([5, 5, label_width-5, label_height-5], outline='black', width=2)
    # 添加商品名称
    draw.text((20, 20), f"商品: {product_name}", fill='black')
    draw.text((20, 50), f"价格: ¥{price:.2f}", fill='black')
    # 将条形码粘贴到标签上
    barcode_img = barcode_img.resize((350, 100))
    label.paste(barcode_img, (25, 80))
    # 添加公司信息
    draw.text((20, 200), "感谢购买!", fill='gray')
    # 保存标签
    label.save(output_file)
    print(f"标签已生成: {output_file}")
# 使用示例
create_label_with_barcode(
    product_name="示例商品",
    price=99.99,
    barcode_data="ITEM12345",
    output_file="product_label.png"
)

支持的条形码类型

  • EAN-13: 13位数字,常用于零售商品
  • EAN-8: 8位数字,用于小商品
  • Code 39: 支持字母数字
  • Code 128: 支持所有ASCII字符
  • UPC-A: 12位数字,北美标准

注意事项

  1. 条形码验证: 确保数据符合条形码规范
  2. 图像质量: 设置合适的dpi以保证打印质量
  3. 静区: 条形码周围需要保留空白区域
  4. 校验位: 某些条形码类型需要计算校验位

这些案例涵盖了从简单的条形码生成到批量处理的完整方案,您可以根据实际需求选择合适的实现方式。

抱歉,评论功能暂时关闭!