资讯动态

【教学类-162-01】20260827“主题墙-牙齿学号贴”(Python在图片上批量学号+自动插入单元格统一大小)

发布时间:2026/8/29 16:34:59 来源:尧图企业网站定制
一、背景需求开学做环境创设中班有刷牙内容需要做背景版。搭档发了AI生成的图片。要求A4一页4*5个大小。打印后再牙齿上写学号。我说我可以程序批量添加学号。二、批量给牙齿图片from PIL import Image, ImageDraw, ImageFont import os # 修改这里路径建议写绝对路径避免找不到文件 base_dir rC:\Users\mhjg2\Desktop\牙齿 # 你的123文件夹 input_image os.path.join(base_dir, 牙齿修图.jpg) out_folder os.path.join(base_dir, 222) # 创建输出目录不存在自动新建 os.makedirs(out_folder, exist_okTrue) # 微软雅黑加粗 20磅 try: # Windows 微软雅黑粗体 msyhbd.ttc font ImageFont.truetype(msyhbd.ttc, 20) except OSError: # 如果找不到微软雅黑字体就降级默认字体 print(⚠️ 未找到微软雅黑粗体使用系统默认字体) font ImageFont.load_default(size20) # 循环1~30 for i in range(1, 31): # 读取底图 im Image.open(input_image).convert(RGB) draw ImageDraw.Draw(im) # (x100,y100)位置写数字黑色文字 draw.text(xy(100, 100), textstr(i), fontfont, fill(0, 0, 0)) # 文件名格式化01.png、02.png ……30.png out_name f{i:02d}.png save_full os.path.join(out_folder, out_name) im.save(save_full) print(f生成 {save_full}) print(\n✅全部30张图片处理完毕)左上角很小一个数字接下去就是不断调整数字的坐标和字体大小反复测试修改两个数字我觉得单数的位置正好但是双数的位置要想向左移动给了两个选择反复测试后确定这两个坐标位置 主题墙刷牙区的牙齿添加学号 豆包阿夏 202060828 from PIL import Image, ImageDraw, ImageFont import os base_dir rC:\Users\mhjg2\Desktop\牙齿 input_image os.path.join(base_dir, 牙齿修图.jpg) out_folder os.path.join(base_dir, 222) os.makedirs(out_folder, exist_okTrue) # 微软雅黑粗体完整系统路径 font_path rC:\Windows\Fonts\msyhbd.ttc try: font ImageFont.truetype(font_path, 350) print(✅成功加载微软雅黑加粗字体) except OSError: print(⚠️ 未找到微软雅黑粗体使用系统默认字体) font ImageFont.load_default(size260) for i in range(1, 31): im Image.open(input_image).convert(RGB) draw ImageDraw.Draw(im) text str(i) # 判断位数选择坐标 if len(text) 1: xy (580, 500) else: xy (460, 500) draw.text(xyxy, texttext, fontfont, fill(0, 0, 0)) out_name f{i:02d}.png save_full os.path.join(out_folder, out_name) im.save(save_full) print(f生成 {save_full} 数字:{text} 坐标:{xy}) print(\n✅全部30张图片处理完毕)三、批量插入单元格内隐藏边框。代码D:\Python310\python.exe -m pip install docx2pdf PyPDF2 主题墙刷牙区的牙齿添加学号 合并PDF 豆包阿夏 202060828 from docx import Document from docx.shared import Cm import os from docx2pdf import convert from PyPDF2 import PdfMerger import shutil base_dir rC:\Users\mhjg2\Desktop\牙齿 template_path os.path.join(base_dir, 模版.docx) img_folder os.path.join(base_dir, 222) out_save_dir os.path.join(base_dir, 输出word) temp_pdf_dir os.path.join(base_dir, 临时pdf) # 存放单份pdf os.makedirs(out_save_dir, exist_okTrue) os.makedirs(temp_pdf_dir, exist_okTrue) IMG_W Cm(5.5) IMG_H Cm(4.6) # 读取01~30图片 img_list [] for n in range(1, 31): fname f{n:02d}.png fp os.path.join(img_folder, fname) if os.path.exists(fp): img_list.append(fp) print(f读到图片{fname}) print(f\n总共找到图片{len(img_list)} 张) # 任务001.docx放1‑20002.docx放21‑30 task_list [ {out_name:001.docx, img_start:0, img_end:20}, {out_name:002.docx, img_start:20, img_end:30} ] generated_pdf_list [] for task in task_list: doc Document(template_path) table doc.tables[0] pic_offset 0 # 4行 ×5列 20单元格 for row in range(4): for col in range(5): cell table.cell(row, col) cell.text para cell.paragraphs[0] run para.add_run() current_img_idx task[img_start] pic_offset if current_img_idx len(img_list): run.add_picture(img_list[current_img_idx], widthIMG_W, heightIMG_H) pic_offset 1 docx_full os.path.join(out_save_dir, task[out_name]) doc.save(docx_full) print(f✅已生成docx{task[out_name]}图片区间{task[img_start]1} ~ {task[img_end]}) # docx转pdf参考拼图代码逻辑 pdf_name os.path.splitext(task[out_name])[0] .pdf pdf_full os.path.join(temp_pdf_dir, pdf_name) convert(docx_full, pdf_full) generated_pdf_list.append(pdf_full) print(f✅已转PDF{pdf_name}) print(\n----------合并PDF------------) merger PdfMerger() for pdf_file in generated_pdf_list: print(f合并{pdf_file}) merger.append(pdf_file) # 输出合并后的总pdf到牙齿根目录 final_pdf os.path.join(base_dir, 牙齿拼图_合并总文件.pdf) merger.write(final_pdf) merger.close() print(f✅合并完成总PDF{final_pdf}) print(\n----------清理临时文件(可选)------------) # 取消下面注释会删除临时pdf文件夹docx保留在输出word文件夹 # shutil.rmtree(temp_pdf_dir, ignore_errorsTrue) print(\n全部处理完成)所以docx模版改成3行5列 主题墙刷牙区的牙齿添加学号 合并PDF 豆包阿夏 202060828 from docx import Document from docx.shared import Cm import os from docx2pdf import convert from PyPDF2 import PdfMerger import shutil import time base_dir rC:\Users\mhjg2\Desktop\牙齿 template_path os.path.join(base_dir, 模版.docx) img_folder os.path.join(base_dir, 222) temp_pdf_dir os.path.join(base_dir, 临时pdf) # 存放单份pdf os.makedirs(temp_pdf_dir, exist_okTrue) IMG_W Cm(5.5) IMG_H Cm(4.6) # 读取01~30图片 img_list [] for n in range(1, 31): fname f{n:02d}.png fp os.path.join(img_folder, fname) if os.path.exists(fp): img_list.append(fp) print(f读到图片{fname}) print(f\n总共找到图片{len(img_list)} 张) # 自动计算不再手动写0‑15、15‑30 ROWS 3 COLS 5 PER_DOC ROWS * COLS # 每份文档最多容纳图片数量 15张 generated_pdf_list [] current_img_pos 0 # 当前图片指针全局向后移动 # 循环生成多份docx直到全部图片处理完毕 doc_index 1 while current_img_pos len(img_list): doc Document(template_path) table doc.tables[0] pic_offset 0 for row in range(ROWS): for col in range(COLS): cell table.cell(row, col) cell.text para cell.paragraphs[0] run para.add_run() # 还有图片就贴图没有就留空白 if current_img_pos len(img_list): run.add_picture(img_list[current_img_pos], widthIMG_W, heightIMG_H) current_img_pos 1 pic_offset 1 out_name f{doc_index:03d}.docx docx_full os.path.join(temp_pdf_dir, out_name) doc.save(docx_full) print(f✅已生成docx{out_name}已处理到第 {current_img_pos} 张图片) # docx转pdf pdf_name os.path.splitext(out_name)[0] .pdf pdf_full os.path.join(temp_pdf_dir, pdf_name) convert(docx_full, pdf_full) generated_pdf_list.append(pdf_full) print(f✅已转PDF{pdf_name}) doc_index 1 print(\n----------合并PDF------------) merger PdfMerger() for pdf_file in generated_pdf_list: print(f合并{pdf_file}) merger.append(pdf_file) final_pdf os.path.join(base_dir, 牙齿拼图_合并总文件.pdf) merger.write(final_pdf) merger.close() print(f✅合并完成总PDF{final_pdf}) # 等待2秒释放Word打开的文件句柄关键 time.sleep(2) def force_remove_folder(folder_path): 强制删除文件夹先删除内部所有文件再删目录 if not os.path.exists(folder_path): return # 先删除文件夹内全部文件 for name in os.listdir(folder_path): full_path os.path.join(folder_path, name) try: if os.path.isfile(full_path): os.remove(full_path) elif os.path.isdir(full_path): shutil.rmtree(full_path) except Exception as e: print(f跳过删除 {full_path}: {e}) # 再删除空文件夹 try: os.rmdir(folder_path) print(f✅已删除文件夹: {folder_path}) except Exception as e: print(f⚠️文件夹无法自动删除 {folder_path}请手动删除{e}) print(\n----------清理临时文件------------) force_remove_folder(temp_pdf_dir) print(\n全部处理完成)效果展示打印裁剪0.3CM白边、塑封、裁剪0.3CM透明边感悟AI可以在幼儿园标志制作主题墙牙齿批量添加学号批量插入单元格控制图片大小上都能运用。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价