Python条形码生成案例?

wen python案例 2

本文目录导读:

  1. 安装必要库
  2. 基础条形码生成案例
  3. 高级定制案例
  4. PDF报表中的条形码
  5. Web应用集成
  6. 使用第三条库:python-barcode 完整示例

我来为您提供几种Python生成条形码的实用案例。

安装必要库

pip install python-barcode
pip install Pillow  # 用于图像处理

基础条形码生成案例

1 EAN-13 条形码

import barcode
from barcode import EAN13
from barcode.writer import ImageWriter
# 生成EAN-13条形码(12位数字,最后一位自动计算)
def generate_ean13():
    # 12位数字(不含校验位)
    code = '5901234123457'
    # 创建条形码对象
    ean = EAN13(code, writer=ImageWriter())
    # 保存为PNG图片
    ean.save('ean13_barcode')
    print("EAN-13条形码已生成:ean13_barcode.png")
    # 获取SVG格式
    ean_svg = EAN13(code)
    ean_svg.save('ean13_barcode_svg')
    print("EAN-13条形码SVG已生成:ean13_barcode_svg.svg")
generate_ean13()

2 多种条形码格式

from barcode import get_barcode_class
from barcode.writer import ImageWriter
def generate_multiple_barcodes():
    # 支持的条形码类型
    barcode_types = ['code128', 'code39', 'ean13', 'ean8', 'upca']
    for barcode_type in barcode_types:
        # 获取条形码类
        BarcodeClass = get_barcode_class(barcode_type)
        try:
            # 根据类型选择合适的数据
            if barcode_type == 'ean13':
                data = '5901234123457'
            elif barcode_type == 'ean8':
                data = '12345670'
            elif barcode_type == 'upca':
                data = '12345678901'
            else:
                data = 'ABC-12345-6789'
            # 生成条形码
            barcode_instance = BarcodeClass(data, writer=ImageWriter())
            # 保存图片
            filename = f'barcode_{barcode_type}'
            barcode_instance.save(filename)
            print(f"{barcode_type.upper()}条形码已生成:{filename}.png")
        except Exception as e:
            print(f"生成{barcode_type}失败: {e}")
generate_multiple_barcodes()

高级定制案例

1 自定义样式和尺寸

from barcode import EAN13
from barcode.writer import ImageWriter
from PIL import Image, ImageDraw, ImageFont
def customized_barcode():
    # 自定义写入器选项
    options = {
        'module_width': 0.5,      # 条码宽度
        'module_height': 50,      # 条码高度
        'font_size': 20,          # 字体大小
        'text_distance': 5,       # 文字距离
        'quiet_zone': 6.5,        # 空白区域
        'background': 'white',    # 背景颜色
        'foreground': 'black',    # 前景颜色
        'write_text': True,       # 是否显示文字
        'center_text': True,      # 文字居中
    }
    # 创建自定义写入器
    writer = ImageWriter()
    writer.set_options(options)
    # 生成条形码
    code = '5901234123457'
    ean = EAN13(code, writer=writer)
    ean.save('customized_barcode')
    print("自定义条形码已生成:customized_barcode.png")
customized_barcode()

2 批量生成条形码

import pandas as pd
from barcode import get_barcode_class
from barcode.writer import ImageWriter
import os
def batch_generate_barcodes():
    # 产品数据
    products = [
        {'code': '5901234123457', 'name': '产品A', 'price': 29.99},
        {'code': '5901234123464', 'name': '产品B', 'price': 39.99},
        {'code': '5901234123471', 'name': '产品C', 'price': 49.99},
    ]
    # 创建输出目录
    output_dir = 'barcodes'
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    # 批量生成
    for product in products:
        try:
            # 生成条形码
            BarcodeClass = get_barcode_class('ean13')
            barcode_instance = BarcodeClass(
                product['code'], 
                writer=ImageWriter()
            )
            # 保存文件
            filename = f"{output_dir}/{product['name']}_{product['code']}"
            barcode_instance.save(filename)
            print(f"已生成:{product['name']} - {product['code']}")
        except Exception as e:
            print(f"生成{product['name']}失败: {e}")
batch_generate_barcodes()

PDF报表中的条形码

from reportlab.lib import colors
from reportlab.graphics.barcode import code128
from reportlab.graphics.shapes import Drawing
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.graphics import renderPDF
def create_pdf_with_barcode():
    # 创建PDF
    c = canvas.Canvas("barcode_report.pdf", pagesize=A4)
    width, height = A4
    # 添加标题
    c.setFont("Helvetica-Bold", 24)
    c.drawString(100, height - 100, "产品条形码报表")
    # 添加多个条形码
    products = [
        ("产品A", "ABC-12345", 100, height - 200),
        ("产品B", "XYZ-67890", 100, height - 350),
        ("产品C", "QWE-54321", 100, height - 500),
    ]
    for name, code, x, y in products:
        # 添加产品名称
        c.setFont("Helvetica", 14)
        c.drawString(x, y, f"产品: {name}")
        # 生成条形码
        barcode = code128.Code128(code)
        barcode.width = 200
        barcode.height = 50
        # 绘制条形码
        barcode.drawOn(c, x, y - 70)
        # 添加条形码编号
        c.setFont("Helvetica", 10)
        c.drawString(x, y - 130, f"条形码: {code}")
    # 保存PDF
    c.save()
    print("PDF报表已生成:barcode_report.pdf")
create_pdf_with_barcode()

Web应用集成

from flask import Flask, send_file, request
from barcode import get_barcode_class
from barcode.writer import ImageWriter
import io
app = Flask(__name__)
@app.route('/generate_barcode')
def generate_barcode():
    # 获取参数
    code = request.args.get('code', '123456789012')
    barcode_type = request.args.get('type', 'default')
    # 映射到标准条形码类型
    type_mapping = {
        'ean13': 'ean13',
        'ean8': 'ean8',
        'code128': 'code128',
        'code39': 'code39',
    }
    bc_type = type_mapping.get(barcode_type, 'code128')
    try:
        # 生成条形码
        BarcodeClass = get_barcode_class(bc_type)
        writer = ImageWriter()
        # 创建内存中的字节流
        buffer = io.BytesIO()
        barcode_instance = BarcodeClass(code, writer=writer)
        barcode_instance.write(buffer)
        buffer.seek(0)
        return send_file(
            buffer,
            mimetype='image/png',
            as_attachment=False,
            download_name=f'barcode_{code}.png'
        )
    except Exception as e:
        return f"生成条形码失败: {str(e)}", 400
@app.route('/')
def index():
    return '''
    <html>
        <head><title>条形码生成器</title></head>
        <body>
            <h1>条形码生成器</h1>
            <form action="/generate_barcode" method="get">
                输入数字:
                <input type="text" name="code" value="123456789012">
                <select name="type">
                    <option value="code128">Code 128</option>
                    <option value="ean13">EAN-13</option>
                    <option value="ean8">EAN-8</option>
                    <option value="code39">Code 39</option>
                </select>
                <input type="submit" value="生成条形码">
            </form>
            <br>
            <img src="/generate_barcode?code=5901234123457&type=ean13" alt="示例条形码">
        </body>
    </html>
    '''
if __name__ == '__main__':
    app.run(debug=True)

使用第三条库:python-barcode 完整示例

from barcode import EAN13, Code128, Code39
from barcode.writer import ImageWriter
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, code, filename=None):
        """生成EAN-13条形码"""
        if filename is None:
            filename = f"ean13_{code}"
        ean = EAN13(code, writer=ImageWriter())
        filepath = os.path.join(self.output_dir, filename)
        ean.save(filepath)
        return f"{filepath}.png"
    def generate_code128(self, code, filename=None):
        """生成Code128条形码"""
        if filename is None:
            filename = f"code128_{code.replace('/', '_')}"
        code128 = Code128(code, writer=ImageWriter())
        filepath = os.path.join(self.output_dir, filename)
        code128.save(filepath)
        return f"{filepath}.png"
    def generate_code39(self, code, filename=None):
        """生成Code39条形码"""
        if filename is None:
            filename = f"code39_{code.replace('/', '_')}"
        code39 = Code39(code, writer=ImageWriter(), add_checksum=False)
        filepath = os.path.join(self.output_dir, filename)
        code39.save(filepath)
        return f"{filepath}.png"
    def batch_generate(self, codes, barcode_type='ean13'):
        """批量生成条形码"""
        results = []
        for code in codes:
            try:
                if barcode_type == 'ean13':
                    filepath = self.generate_ean13(code)
                elif barcode_type == 'code128':
                    filepath = self.generate_code128(code)
                elif barcode_type == 'code39':
                    filepath = self.generate_code39(code)
                else:
                    raise ValueError(f"未知的条形码类型: {barcode_type}")
                results.append({
                    'code': code,
                    'filepath': filepath,
                    'status': '成功'
                })
            except Exception as e:
                results.append({
                    'code': code,
                    'filepath': None,
                    'status': f'失败: {str(e)}'
                })
        return results
# 使用示例
if __name__ == '__main__':
    generator = BarcodeGenerator()
    # 单个生成
    path = generator.generate_ean13('5901234123457')
    print(f"生成EAN-13条形码: {path}")
    path = generator.generate_code128('ABC-12345')
    print(f"生成Code128条形码: {path}")
    path = generator.generate_code39('CODE39TEST')
    print(f"生成Code39条形码: {path}")
    # 批量生成
    codes = [
        '5901234123457',
        '5901234123464',
        '5901234123471',
    ]
    results = generator.batch_generate(codes, 'ean13')
    for result in results:
        print(f"条形码 {result['code']}: {result['status']} - {result['filepath']}")

这些示例涵盖了Python条形码生成的各种场景,您可以根据实际需求选择合适的方法,条形码在库存管理、产品标签、超市商品等领域非常实用。

标签: 条形码

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