【办公类-109-05】20250915长方形挂牌卡片(word编辑单面)(85*54mm横板和54*85mm竖版,一页9张)

发布时间:2026/7/21 19:16:03
【办公类-109-05】20250915长方形挂牌卡片(word编辑单面)(85*54mm横板和54*85mm竖版,一页9张) 背景需求由于少子化,各幼儿园都可能出现学额不满的情况,所以插班和离园的频率高。教师需要的家长接送卡圆牌和幼儿横竖版挂牌里的名字贴需要更新。但我不想反复修改了。所以把圆牌做成了word可编辑版本https://blog.csdn.net/reasonsummer/article/details/151656400?spm=1011.2415.3001.5331https://blog.csdn.net/reasonsummer/article/details/151656400?spm=1011.2415.3001.5331现在把挂牌(长方形横版竖版)也做成可编辑的其实原来做挂牌横竖卡片时,就已经是直接做在word里,只是最后是转PDF,并合并PDF了。因此通过deepseek,把一个班级的多个docx用deepcopy方式win32方式,复制到一个班级的第一个docx模版里。实现word合并。不过Deepseek和豆包都写了十几次,终于可以用了。''' 1.制作20250901托小班长方形卡片,横版85*54mm和竖版54*85mm,一页9张单面,凑满27个和36个。一个班级所有word合并,可以编辑 2.添加姓名拼音显示功能(拼音在姓名上方,带声调) 3.python 3.7.8 3. 横版布局:单列显示园区和班级,双列显示拼音、姓名和学号 4. 竖版布局:单列显示所有信息 5. 添加照片占位符:2.5cm宽*3.5cm高,黑色框线,中间写"贴照片" 豆包,deepseek,阿夏 20250915 ''' # ========== 记录程序开始时间 ========== import time start_time = time.time() # ========== 创建照片占位符图片 ========== import os from copy import deepcopy from PIL import Image, ImageDraw, ImageFont import shutil import pandas as pd from pypinyin import pinyin, Style from docx import Document from docx.shared import Cm, Pt from docx.enum.text import WD_PARAGRAPH_ALIGNMENT from docx.oxml.ns import qn from docx.oxml import OxmlElement import glob from docx.oxml.shared import qn as oxml_qn from docx.oxml import parse_xml from docx.enum.text import WD_BREAK from docx.oxml.shared import qn from docx.oxml import parse_xml def create_photo_placeholder(image_path): """创建照片占位符图片""" try: # 确保目录存在 os.makedirs(os.path.dirname(image_path), exist_ok=True) # 设置图片尺寸 (2.5cm x 3.5cm) width, height = int(2.5/2.54*300), int(3.5/2.54*300) # 转换为300dpi的像素 # 创建白色背景图片 img = Image.new('RGB', (width, height), 'white') draw = ImageDraw.Draw(img) # 绘制黑色边框 draw.rectangle([(10, 10), (width-10, height-10)], outline='black', width=2) # 添加文字 try: # 尝试使用微软雅黑字体 font = ImageFont.truetype("msyh.ttc", 20) except: # 如果找不到字体,使用默认字体 font = ImageFont.load_default() text = "贴照片" text_bbox = draw.textbbox((0, 0), text, font=font) text_width = text_bbox[2] - text_bbox[0] text_height = text_bbox[3] - text_bbox[1] text_x = (width - text_width) // 2 text_y = (height - text_height) // 2 draw.text((text_x, text_y), text, fill='black', font=font) # 保存图片 img.save(image_path) print(f"已创建照片占位符: {image_path}") return True except Exception as e: print(f"创建照片占位符失败: {str(e)}") return False # ========== 读取Excel数据 ========== def read_excel_data(file_path): """读取Excel文件所有工作表数据,返回字典{班级名: 数据列表}""" # 特殊姓氏读音字典 SPECIAL_SURNAMES = { "乐": "Yuè", "单": "Shàn", "解": "Xiè", "查": "Zhā", "盖": "Gě", "仇": "Qiú", "种": "Chóng", "朴": "Piáo", "翟": "Zhái", "区": "Ōu", "繁": "Pó", "覃": "Qín", "召": "Shào", "华": "Huà", "纪": "Jǐ", "曾": "Zēng", "缪": "Miào", "员": "Yùn", "车": "Chē", "过": "Guō", "尉": "Yù", "万": "Wàn" } # 复姓处理字典 COMPOUND_SURNAMES = { "欧阳": "Ōu yáng", "上官": "Shàng guān", "皇甫": "Huáng fǔ", "尉迟": "Yù chí", "万俟": "Mò qí", "长孙": "Zhǎng sūn", "司徒": "Sī tú", "司空": "Sī kōng", "司马": "Sī mǎ", "诸葛": "Zhū gě", "东方": "Dōng fāng", "独孤": "Dú gū", "慕容": "Mù róng", "宇文": "Yǔ wén" } def correct_surname_pinyin(name): """校正姓氏拼音,处理多音字问题""" if not name or not isinstance(name, str) or name.strip() == "": return "" name = name.strip() # 先检查复姓 for surname in COMPOUND_SURNAMES: if name.startswith(surname): surname_pinyin = COMPOUND_SURNAMES[surname] given_name = name[2:] given_pinyin = ' '.join([p[0] for p in pinyin(given_name, style=Style.TONE)]) return f"{surname_pinyin} {given_pinyin}" # 检查单姓 first_char = name[0] if first_char in SPECIAL_SURNAMES: surname_pinyin = SPECIAL_SURNAMES[first_char] given_name = name[1:] given_pin