奖状证书批量生成(桌签、胸卡、邀请函、邮件合并)
规矩(每次都要遵守)
- 名单和模板只读,结果另存。 脚本只读用户的名单、模板和 logo 图片,生成的文件一律另存为新文件(放在名单旁边,名字叫「名单名_奖状_合并打印.docx」,重名自动加 _1、_2),绝不覆盖。不要用任何别的办法改用户的原文件。
- 先检查,再生成。 拿到名单先跑
check,用大白话告诉用户:读到多少人、哪列是名字、要印哪些内容、还缺什么、有没有空名字/重名/超长名字/生僻字。缺的内容(比如活动名称、落款单位、日期)先问用户,问清楚再make。 - 合规红线(代码里写死,不能绕过):
- 不放任何公章、印章、红头、电子签章。用户要「盖章」就告诉他:打印出来后由单位手工盖章。
- 只允许加用户自己提供的单位 logo,放在页面顶部;文件名像印章的图片会被拒绝。不要帮用户把公章图片改名后塞进去。
- 不做毕业证、学位证、学历证明、成绩单、资格证/执业证/上岗证、准考证、身份证/驾驶证等证件、在职/收入/离职证明、病假条、发票等只能由发证单位出具的东西,也不做大学/中学录取通知书。脚本会拒绝,你也不要换个说法绕过,直接告诉用户这类只能由发证单位出具。
- 可以做:奖状、荣誉证书、培训结业证书、聘书、桌签、胸卡/工作证/参会证、邀请函、培训班/兴趣班/社团/夏令营录取通知、企业录用通知。 - 不联网、不自动安装。 全部在本机处理。缺组件时脚本会提示要运行哪条安装命令,告诉用户这条命令是做什么的,用户同意了才让他自己运行。
- 调用外部程序要说清楚。 只有用户要 PDF(
--pdf)时,脚本才会调用系统自带的 PowerShell 去驱动本机已装的 Word 或 WPS 另存为 PDF,脚本会先打印将运行的程序和参数。跟用户说一句「我会用你电脑上的 Word/WPS 把文件另存成 PDF」,不要隐瞒。 - 跟用户说话用大白话,一步一步说。 不提命令参数和程序里的名字,只说「按名单做奖状」「两个字的名字中间加空格」这类话;告诉用户文件在哪、怎么打印(比如「打开文件→点左上角文件→打印→方向选横向」)。数字(人数、页数)以脚本输出为准。
用法
脚本:python {baseDir}/scripts/certificate.py <子命令> 名单文件 [选项],路径有空格要加引号。
| 子命令 | 做什么 | 会不会动原文件 |
|---|---|---|
layouts |
列出内置版式 | 不读文件 |
check 名单 --layout 版式 或 --template 模板.docx |
读名单、对占位、查空名字/重名/超长/生僻字、合规检查 | 只读 |
make 名单 --layout 版式 或 --template 模板.docx |
批量生成合并打印文件(可再每人一份、转 PDF) | 只读,另存新文件 |
内置版式(--layout,也认这些叫法):
| 版式 | 也叫 | 样子 |
|---|---|---|
| 奖状 | 表扬、喜报 | A4 横版,每人一页:红色大标题、某某同学、正文、落款单位和日期(日期默认写成「二〇二六年十月五日」) |
| 荣誉证书 | 证书、获奖证书、结业证书、聘书 | A4 横版带花边,每人一页;名单有「编号」列就印证书编号 |
| 桌签 | 桌牌、座位牌、席卡、台卡 | A4 竖版,每人一页,上下两面都印名字、上半面倒置,沿中间虚线对折 |
| 胸卡 | 工作证、胸牌、工牌、参会证、代表证、嘉宾证、志愿者证 | 每页多张带裁切虚线;标题跟着叫法走(说「参会证」标题就是参会证) |
| 邀请函 | 请柬、请帖 | A4 竖版,尊敬的某某先生/女士(名单有性别列时自动称呼) |
| 通知书 | 录取通知书、录用通知 | A4 竖版,标题默认「录取通知书」,可改 |
make 和 check 常用选项:
| 选项 | 意思 |
|---|---|
--set 项目=内容 |
所有人都一样的内容,可写多个:--set 活动=秋季运动会 --set 地点=学校礼堂 |
--org 单位 / --date 2026-10-05 |
落款单位、落款日期(不写日期就用今天);名单里有「单位」「日期」列就用名单的 |
--date-style 中文/数字 |
日期写成「二〇二六年十月五日」还是「2026年10月5日」 |
--title 标题 |
改标题,如「三好学生」「参会证」「录用通知书」,可写 {列名} |
--body 正文 |
改正文,可写 {列名},分段用 \n;不写用版式默认正文 |
--space-two |
两个字的名字中间加空格,和三个字的名字对齐 |
--fields 列1,列2 |
桌签/胸卡上名字下面再印哪几列(胸卡默认印部门、职务、编号里有的) |
--card 横版/竖版/大号/宽x高 |
胸卡尺寸:横版 9×5.4 厘米每页 10 张,竖版 6×9 每页 9 张,大号 9.5×6.5 每页 8 张 |
--photo-box |
胸卡留「贴照片处」方框;名单有「照片」列(写图片文件名)就直接放照片 |
--font 字体 |
桌签、胸卡名字的字体:黑体/楷体/宋体/仿宋/微软雅黑 |
--plain --top 厘米 |
套打:不印标题和花边,只印文字,印在买来的奖状纸、证书内芯上 |
--logo 图片 |
在页面顶部放单位 logo(不能是公章) |
--fit 列名=字数 |
自己的模板里某处最多放几个字,超了自动缩小字号;名字默认按 4 个字算,写 姓名=0 关掉 |
--only 张三,李四 |
只做这几个人(补打、重打用) |
--name-col 列 / --sheet 表 |
姓名列认错了、要用别的工作表时指定 |
--split |
另外每人单独存一个文件(放在「名单名_版式_每人一份」文件夹里) |
--no-merge |
只要每人一份,不要合并文件 |
--file-name {班级}_{姓名} |
每人一份时的文件名,默认「姓名_版式」 |
--pdf |
再用本机的 Word / WPS 转一份 PDF |
--out 文件夹 |
存到别的文件夹,默认名单旁边 |
大白话 → 怎么做
| 用户说 | 怎么做 |
|---|---|
| 「帮我把这个名单做成奖状」 | 先 check 名单 --layout 奖状,问清活动名称、落款单位、日期,再 make 名单 --layout 奖状 --set 活动=… --org … --date … |
| 「三好学生奖状,名字两个字的要对齐」 | make 名单 --layout 奖状 --body "被评为{奖项},特发此状,以资鼓励。" --space-two … |
| 「我买了奖状纸,只要把字印上去」 | 加 --plain;先让用户用白纸试印一张对位置,偏了用 --top 调上下 |
| 「做会议桌签/座位牌」 | make 名单 --layout 桌签;要印单位职务就加 --fields 单位,职务;提醒用厚纸、沿虚线对折 |
| 「做工作证/参会证,每页多印几张」 | make 名单 --layout 参会证;要贴照片加 --photo-box;竖的用 --card 竖版 |
| 「给每位嘉宾发邀请函」 | make 名单 --layout 邀请函 --set 活动=… --set 时间=… --set 地点=… --org … |
| 「兴趣班录取通知」「新员工录用通知」 | make 名单 --layout 通知书 --title 录用通知书 --body "…{部门}…" |
| 「我有自己的模板」 | 让用户在模板要填的地方写 {姓名}、{班级}(大括号里写名单的列名),先 check 名单 --template 模板.docx 看每个占位对上没有,再 make |
| 「模板一页印 4 张」 | 让用户在模板里写 {姓名1}…{姓名4}(其它列同理),脚本自动每页放 4 人 |
| 「每人单独一个文件,用班级加名字命名」 | 加 --split --file-name "{班级}_{姓名}" |
| 「顺便转成 PDF」 | 加 --pdf;转不了就把脚本给的「另存为 PDF」步骤念给用户 |
| 「张三那张印错了,重打一张」 | 加 --only 张三 |
| 「盖上学校的公章」「做个红头」 | 拒绝放章:告诉用户打印后由单位手工盖章;只可以放单位 logo |
| 「做一批毕业证/资格证/在职证明」 | 拒绝:这类只能由发证单位出具,这个技能不做 |
生成的文件里有什么
- 合并打印文件:一个 Word,每人一页(胸卡、多人模板是每页多人),打开一次就能全部打印。文字都能再改。
- 每人一份(可选):每个人单独一个 Word,文件名可自定,重名自动加 _1、_2。
- PDF(可选):和 Word 文件放在一起。
- 自动处理:名字、正文太长自动缩小字号;两个字名字可加空格;日期按中文习惯写。
- 检查提醒:名字空着、名字重复、某列空着、照片找不到、生僻字在常用字体里没有(可能印成方框)都会提示。生僻字检查只读取本机字体文件里的字符表,不安装、不改动字体。
需要的组件
- 必须:Python 3.8+、python-docx(生成 Word)。缺了脚本会提示
pip install python-docx。 - 读 .xlsx 名单需要 openpyxl(缺了提示
pip install openpyxl,或者把名单另存为 CSV)。 - 转 PDF 需要本机已装 Microsoft Word 或 WPS;都没有就只生成 Word,并教用户用 WPS「另存为 PDF」。
不做什么
- 不放公章、印章、红头、电子签章,不仿制任何单位的正式文件。
- 不做学历证书、资格证书、证件、各类证明、准考证、发票,不做大学/中学录取通知书。
- 不修改、不覆盖用户的名单、模板和图片;不联网、不上传;不自动安装组件;不写计划任务、不常驻后台。
- 不读老版 .xls / .doc / .wps 文件(请用户另存为 .xlsx / .docx);不破解有密码的文件。