画展筹备里最琐碎的活是展签:两百多张作品,每张要写姓名、班级、作品名、材料。这篇记录我用 Python 把展签和作品集做成批量生成的过程,从 CSV 数据整理到 PDF 排版,全部本地完成。
关键词:Python、reportlab、qrcode、数字化、批量生成
一、展签为什么值得写脚本
十月的画展开幕前,作品的拍摄和装裱由各班老师负责,展签落到我头上。粗算一下,八十多位学员,每人挑两三张,加起来两百多张作品。每张展签要写六项信息:作品编号、姓名、班级、作品名、材料、尺寸。
以前的做法是开一个 Word 模板,复制上一张,改名字,再复制,再改。一下午做几十张,改到眼花,还出过两次错——把同班两个孩子的作品名贴反了。展览现场家长看得仔细,这种错很影响观感。展签这种东西,数量大、字段固定、样式单一,正适合交给脚本。
二、先把数据收进一张 CSV
我定了一个 CSV 文件,六个字段:编号、姓名、班级、作品名、材料、尺寸。数据来源是各班老师发的报名表,格式五花八门,我花了一个晚上手工并进这张表。
没有用在线表格,原因是报名表里有孩子姓名,这类信息我不想放在任何第三方服务上。本地一个文件,改完即走,也方便脚本直接读。
三、展签生成:qrcode 加 reportlab
展签尺寸是 A6,一张 A4 纸排四张。每张展签左上角印一个二维码,内容就是作品编号加姓名的文本。现场作品多,万一两张靠在一起分不清归属,工作人员扫一下就能对回班级和姓名。
代码核心是两步。第一步用 qrcode 库把文本编码成图片,纠错等级选 M,印刷品上有划痕也能扫出来。第二步用 reportlab 排版,注册思源黑体的 TTF 文件,避免 PDF 里中文变成方块。字体只用开源的,版权这块我之前吃过亏,现在所有对外印刷品只碰开源字体。
生成两百多张展签,脚本跑了不到十秒。出错也不怕,改 CSV 里那一行,重跑一遍就行。
四、作品集:同一份数据换一个模板
展签之外,还给展厅做了一本作品集,按班级分组。用的还是那一份 CSV,换一个 reportlab 模板:每页留一张照片的位置(照片打印后粘贴),下方放作品信息。
数据只维护一份,两种输出,这是这次做法里我觉得最划算的地方。以前展签和作品集是两套东西,改一个名字要改两处,总有漏改的时候。
五、三个注意点
一是姓名隐私。作品集放在展厅入口,陌生人翻得到。我把作品集里的姓名改成"姓氏加编号"的写法,全名只出现在内部核对用的展签上。
二是打印样张。PDF 生成完先打一张样张,检查字体有没有缺字。生僻字是重灾区,有个孩子名字里带"燊",思源黑体有这个字,但换字体就可能漏。样张这一步不能省。
三是可重跑。所有中间产物只有一份 CSV 和两个脚本,明年办展,改数据就能再跑一遍,不用从头再来。
这件事本身没有技术难度,价值在于把一个手工、易错、每次重来的流程,变成一份数据加两个脚本。我所在的机构叫画绛集美术,做少儿美术教育快十年。
本文案例基于本人所在机构内部实践,仅供同业参考,不构成具体教学方案推荐