You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ReportLab将PNG条形码图片插入自定义标签?

如何用ReportLab将PNG条形码插入自定义标签

直接给你修改后的可运行代码,关键改动点我会在后面说明:

import labels
from reportlab.graphics import shapes

# 纸张与标签规格
PADDING = 1
specs = labels.Specification(
    215.9, 279.4, 3, 10, 64, 25.4, corner_radius=2,
    left_margin=5, right_margin=5, top_margin=13,
    left_padding=PADDING, right_padding=PADDING, top_padding=PADDING,
    bottom_padding=PADDING,
    row_gap=0)


# 绘制标签的核心函数
def draw_label(label, width, height, obj):
    # obj是传入的条形码图片路径
    # 创建图片对象,设置位置与尺寸(留padding避免贴边)
    barcode_img = shapes.Image(
        x=PADDING, 
        y=PADDING, 
        width=width - 2*PADDING, 
        height=height - 2*PADDING, 
        filename=obj
    )
    label.add(barcode_img)

# 创建标签页
sheet = labels.Sheet(specs, draw_label, border=True)

# 传入实际的条形码图片路径,替换成你的文件路径
sheet.add_label("barcode_1.png")
sheet.add_label("barcode_2.png")
sheet.add_label("barcode_3.png")

# 保存PDF
sheet.save('labels_with_barcodes.pdf')
print("{0:d} 个标签已输出到 {1:d} 页中。".format(sheet.label_count, sheet.page_count))

关键改动说明:

  • 替换了draw_label函数的逻辑:原来的添加文字改成加载PNG图片,用shapes.Image类处理图片,通过filename参数传入图片路径
  • 调整了图片的位置和尺寸:用PADDING控制图片与标签边缘的间距,确保图片不会超出标签范围
  • 调用sheet.add_label时传入实际的条形码图片路径,而不是字符串占位符

如果你的条形码尺寸和标签比例不匹配,可以调整width和height参数,比如固定其中一个维度,另一个按比例缩放,避免图片变形:

# 示例:固定图片高度,按比例计算宽度并居中显示
from PIL import Image as PILImage

def draw_label(label, width, height, obj):
    with PILImage.open(obj) as img:
        img_width, img_height = img.size
        # 按标签高度(减padding)缩放图片宽度
        scale = (height - 2*PADDING) / img_height
        new_width = img_width * scale
        # 确保宽度不超过标签宽度(减padding)
        if new_width > width - 2*PADDING:
            scale = (width - 2*PADDING) / img_width
            new_height = img_height * scale
            new_width = width - 2*PADDING
        else:
            new_height = height - 2*PADDING
    barcode_img = shapes.Image(
        x=(width - new_width)/2,  # 水平居中
        y=(height - new_height)/2, # 垂直居中
        width=new_width, 
        height=new_height, 
        filename=obj
    )
    label.add(barcode_img)

这个版本会自动按比例缩放图片,并让图片在标签内居中显示,需要先安装PIL(pip install pillow)。

内容的提问来源于stack exchange,提问作者TheCrazySwede

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:15:41