吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 151|回复: 0
上一主题 下一主题
收起左侧

[Python 转载] 自动生成荣誉证书

[复制链接]
跳转到指定楼层
楼主
ookk 发表于 2026-6-10 14:39 回帖奖励
本帖最后由 ookk 于 2026-6-10 17:39 编辑

需求很简单:自动读取XLS表格中姓名、编号、日期列,叠加在背景图片上,可设置字体、字号、颜色。网上找了几个工具,都不是很好用,借助AI工具完成编码。

[Python] 纯文本查看 复制代码
import os
import pandas as pd
from PIL import Image, ImageDraw, ImageFont

# ==================== 配置参数 ====================
EXCEL_FILE = "名单.xlsx"          # 输入的 Excel 文件路径
BACKGROUND_IMG = "background.png" # 背景图片路径
OUTPUT_DIR = "证书输出"             # 输出文件夹

# ---- A 列 ----
A_FONT_PATH = "C:/Windows/Fonts/simhei.ttf"          
A_FONT_SIZE = 40
A_COLOR = (0, 0, 0)               # RGB 黑色
A_POSITION = (265, 270)           # (x, y) 左上角坐标

# ---- B 列 ----
B_FONT_PATH = "C:/Windows/Fonts/simhei.ttf"                  
B_FONT_SIZE = 46
B_COLOR = (0, 0, 0) 
B_POSITION = (340, 840)

# ---- C 列 ----
C_FONT_PATH = "C:/Windows/Fonts/simhei.ttf"
C_FONT_SIZE = 34
C_COLOR = (0, 0, 0) 
C_POSITION = (940, 1682)

def load_font(font_path, size):

    if font_path and os.path.isfile(font_path):
        return ImageFont.truetype(font_path, size)
    else:
        return ImageFont.load_default()

def sanitize_filename(text):
illegal = r'<>:"/\|?*'
    for ch in illegal:
        text = text.replace(ch, '_')
    return text.strip() or "unnamed"

def generate_certificate(row):
text_a = str(row['编号']).zfill(8) if pd.notna(row.get('编号')) else ''
    print(row['编号'])
    text_b = str(row['姓名']) if pd.notna(row.get('姓名')) else ''
    text_c = str(row['日期']) if pd.notna(row.get('日期')) else ''
img = Image.open(BACKGROUND_IMG).convert("RGBA")
    draw = ImageDraw.Draw(img)
font_a = load_font(A_FONT_PATH, A_FONT_SIZE)
    draw.text(A_POSITION, text_a, font=font_a, fill=A_COLOR)
font_b = load_font(B_FONT_PATH, B_FONT_SIZE)
    draw.text(B_POSITION, text_b, font=font_b, fill=B_COLOR)
font_c = load_font(C_FONT_PATH, C_FONT_SIZE)
    draw.text(C_POSITION, text_c, font=font_c, fill=C_COLOR)

    safe_name = sanitize_filename(text_b)
    output_path = os.path.join(OUTPUT_DIR, f"{safe_name}.png")
    img.save(output_path)
    print(f"&#9989; 已生成: {output_path}")

def main():
try:
        df = pd.read_excel(EXCEL_FILE)
    except FileNotFoundError:
        print(f"&#10060; 未找到 Excel 文件: {EXCEL_FILE}")
        return

    required_cols = ['编号', '姓名', '日期']
    if not all(col in df.columns for col in required_cols):
        print(f"&#10060; Excel 中必须包含列: 编号,姓名,日期,当前列名: {list(df.columns)}")
        return

    os.makedirs(OUTPUT_DIR, exist_ok=True)

    # 逐行处理
    for idx, row in df.iterrows():
        generate_certificate(row)

if __name__ == "__main__":
    main()

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-6-11 12:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表