当前位置: 首页 > news >正文

【办公类-18-03】(Python)中班米罗可儿证书批量生成打印(班级、姓名)

作品展示——米罗可儿证书打印幼儿姓名

 

背景需求 

2024年3月1日,中4班孩子一起整理美术操作材料《米罗可儿》的操作本——将每一页纸撕下来,分类摆放、确保纸张上下位置正确。每位孩子们都非常厉害,不仅完成了自己的一本,还将没有来园孩子的操作本也撕开了。正确率高达99%(有5张纸没有摆放正确)

册子整理后,除了封面和封底,最后一页就是“荣誉证书”

以前这些证书,都是班主任手写的(班级、姓名、教师签名、学校、日期),一个班30位孩子,班主任写起来也挺快的。

今年整理完成后,搭档感叹着:“自从用了电脑,钢笔字是越来越差了!”

于是我想到,去年为大班毕业班批量打印过毕业名册。

【办公类-18-01】(Python)大班毕业证书批量打印(幼儿信息、性别、毕业日期、学校、公章、签名、证书日期)_python c1证书模板-CSDN博客文章浏览阅读339次。【办公类-18-01】(Python)大班毕业证书批量打印(幼儿信息、性别、毕业日期、学校、公章、签名、证书日期)_python c1证书模板https://blog.csdn.net/reasonsummer/article/details/131187888?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22131187888%22%2C%22source%22%3A%22reasonsummer%22%7D

干嘛不用程序来批量打印“米罗可儿”荣誉证书呢?

材料准备:

一、扫描图片准备(园长或班主任手写签名的扫描、毕业证图片扫描)

二、WORD模板准备

(0)测算证书纸张大小——比A4小

详细测算后,纸张是28.5*20.8CM

(1)插入证书模板——长宽要自定义设置

 (2)在Word里插入文本框,摆放在相应的位置上。

姓名、班级用{{name}}{{classroom}},

教师签名图片 、学校、证书日期都是固定不修改的,就用预设文字、数字 、图片

 (3)插入签名png格式”——签名图片最好在PS调整一下,字体粗一点、黑一点。

插入文档、

 

 模板做好了,把背景图删除

本次我发现“荣誉证书”纸张比A4小 ,所以word模板也变小了。

 三、EXCLE模板准备

收集所有中4班幼儿名单 、EXCLE内部样式:

EXCEL内部名字(表格在第一个)2-4个名字 举例

三、代码展示:

(一)单份EXCLE文件读取生成PDF:

用法:制作中4班米罗可儿证书名单

 代码展示:

# -*- coding:utf-8 -*- 1 
'''
目的:米罗可儿证书(一个班级单独打印)
作者:阿夏
日期:2024年3月4日 21:54
'''# 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹
from docxtpl import DocxTemplate
import pandas as pd
import os
import time
# 
numnum=int(input('班级(4)\n'))
l=int(input('1、有背景图、2、无背景图\n'))zpath=os.getcwd()+'\\'
zpath=r'C:\Users\jg2yXRZ\OneDrive\桌面\米罗可儿证书'+"\\"file_path=zpath+r'\零时Word'# 二、遍历excel,逐个生成word(form.docx是前面的模板)
try:os.mkdir(file_path)
except:passIDcard = pd.read_excel(zpath+'04(模板)中4班米罗可儿证书名单.xlsx'.format(numnum))
nu=IDcard["nu"]
name = IDcard["name"]
classroom =IDcard["classroom"]  # str.rstrip()用于去掉换行符# math = autho['math']
# eng = autho['eng']# 遍历excel行,逐个生成
num = IDcard.shape[0]
for i in range(num):context = {"nu": nu[i],"name": name[i],"classroom": classroom[i],  }if l==1:tpl = DocxTemplate(zpath+'00米罗可儿证书模板(有背景图).docx')if l==2:tpl = DocxTemplate(zpath+'00米罗可儿证书模板(无背景图).docx')tpl.render(context)# tpl.save(file_path+r"\{} 的身份证.docx".format(name[i]))
#tpl.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\米罗可儿证书/零时Word\{}.docx'.format('%02d'%nu[i]))   from docx2pdf import convert# docx 文件另存为PDF文件inputFile = r'C:\Users\jg2yXRZ\OneDrive\桌面\米罗可儿证书/零时Word/{}.docx'.format('%02d'%nu[i])  # 要转换的文件:已存在outputFile = r'C:\Users\jg2yXRZ\OneDrive\桌面\米罗可儿证书/零时Word/{}.pdf'.format('%02d'%nu[i])  # 要生成的文件:不存在# 先创建 不存在的 文件f1 = open(outputFile, 'w')f1.close()# 再转换往PDF中写入内容convert(inputFile, outputFile)time.sleep(2)print('----------第4步:把都有PDF合并为一个打印用PDF------------')# 多个PDF合并(CSDN博主「红色小小螃蟹」,https://blog.csdn.net/yangcunbiao/article/details/125248205)
import os
from PyPDF2 import PdfFileMerger
target_path =  r'C:\Users\jg2yXRZ\OneDrive\桌面\米罗可儿证书/零时Word'
pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')]
pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst]
pdf_lst.sort()
file_merger = PdfFileMerger()
for pdf in pdf_lst:print(pdf)file_merger.append(pdf)
# file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/下载幼儿姓氏笔画/(打印合集)自己写3个 中6姓名名笔画字帖(28人共{}张).pdf".format(int(len(path))))if l==1:file_merger.write(r'C:\Users\jg2yXRZ\OneDrive\桌面\米罗可儿证书\(打印合集)中{}班毕业证书{}人(有背景图).pdf'.format(numnum,nu[i]))
if l==2:file_merger.write(r'C:\Users\jg2yXRZ\OneDrive\桌面\米罗可儿证书\(打印合集)中{}班毕业证书{}人(无背景图).pdf'.format(numnum,nu[i]))
file_merger.close()
# doc.Close()# print('----------第5步:删除临时文件夹------------')    
import shutil
shutil.rmtree(r'C:\Users\jg2yXRZ\OneDrive\桌面\米罗可儿证书/零时Word') #递归删除文件夹,即:删除非空文件夹

终端输入:

1、有背景图的结果(观察位置用)

 

结果显示: 

2、无背景图的结果(打印用)

 

 打印效果:

 下周用中班办公室的电脑和打印机打印(电脑可以设置打印机的自定义尺寸),观看打印位置是否正好在证书的空行处。

 使用反馈

一、优势:

1、PDF格式批量制作荣誉证书模板,快速打印。

2、让打印后的证书 看上去更正式(打印版比手写板更正式规整),减轻教师手写工作量。

二、不足:

只有29张证书,如果打印机卡纸了,打印错误,就不可能有多的证书了,打印的时候,提心吊胆的o(╥﹏╥)o

以下是多个班级打印证书,没有做,不用看了,但是说不准以后会有机会做,先放着占个位

(二)多份EXCLE名单读取并生成PDF(批量):

用法:在所有大班信息都收集完成后,读取文件名字中的数字((模板)大1班毕业证名单、(模板)大2班毕业证名单)”,循环读取并自动生成。

 代码展示:

# -*- coding:utf-8 -*- 1 
'''
目的:大班毕业证书(所有大名单都收集后的批量打印)
作者:阿夏
日期:2023年6月12日 21:54
'''# 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹
from docxtpl import DocxTemplate
import pandas as pd
import os# numnum=int(input('班级(阿拉伯数字1,2,3,4,5,7,8,9)\n'))
Numnum=['1','2','3','4','5','7','8','9']for numnum in Numnum: zpath=os.getcwd()+'\\'zpath=r'D:\test\03办公类\11毕业册'+'\\'file_path=zpath+r'\零时Word'# 二、遍历excel,逐个生成word(form.docx是前面的模板)try:os.mkdir(file_path)except:passtpl = DocxTemplate(zpath+'毕业证书模板.docx')IDcard = pd.read_excel(zpath+'(模板)大{}班毕业证名单.xlsx'.format(numnum))nu=IDcard["nu"]name = IDcard["name"]sex =IDcard["sex"]  # str.rstrip()用于去掉换行符# math = autho['math']# eng = autho['eng']# 遍历excel行,逐个生成num = IDcard.shape[0]for i in range(num):context = {"nu": nu[i],"name": name[i],"sex": sex[i],  }tpl = DocxTemplate(zpath+'毕业证书模板.docx')tpl.render(context)# tpl.save(file_path+r"\{} 的身份证.docx".format(name[i]))#tpl.save(r'D:\test\03办公类\11毕业册\零时Word\{}.docx'.format('%02d'%nu[i]))   from docx2pdf import convert# docx 文件另存为PDF文件inputFile = r"D:\test\03办公类\11毕业册/零时Word/{}.docx".format('%02d'%nu[i])  # 要转换的文件:已存在outputFile = r"D:\test\03办公类\11毕业册/零时Word/{}.pdf".format('%02d'%nu[i])  # 要生成的文件:不存在# 先创建 不存在的 文件f1 = open(outputFile, 'w')f1.close()# 再转换往PDF中写入内容convert(inputFile, outputFile)print('----------第4步:把都有PDF合并为一个打印用PDF------------')# 多个PDF合并(CSDN博主「红色小小螃蟹」,https://blog.csdn.net/yangcunbiao/article/details/125248205)import osfrom PyPDF2 import PdfFileMergertarget_path =  'D:/test/03办公类/11毕业册/零时Word'pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')]pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst]pdf_lst.sort()file_merger = PdfFileMerger()for pdf in pdf_lst:print(pdf)file_merger.append(pdf)# file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/下载幼儿姓氏笔画/(打印合集)自己写3个 中6姓名名笔画字帖(28人共{}张).pdf".format(int(len(path))))file_merger.write("D:/test/03办公类/11毕业册/(打印合集)大{}班毕业证书人.pdf".format(numnum))file_merger.close()# doc.Close()# print('----------第5步:删除临时文件夹------------')    import shutilshutil.rmtree('D:/test/03办公类/11毕业册/零时Word') #递归删除文件夹,即:删除非空文件夹

终端显示(不用输入信息,直接运行即可)

 最后生成的结果——8个班级的PDF格式

 PDF样式:

  


 

http://www.lryc.cn/news/308790.html

相关文章:

  • js【详解】数据类型原理(含变量赋值详解-浅拷贝)
  • SAM 影像分割——地理空间数据的分段模型的数据调参和自动分割分析
  • Java底层自学大纲_设计模式篇
  • 详解字符串函数<string.h>(上)
  • 1、docker入门
  • Qt应用软件【测试篇】cppchecker静态代码检查
  • [递推与递归]数的计算
  • Cocos Creator 3.8.x 后效处理(前向渲染)
  • 【前端素材】推荐优质后台管理系统 Adminity平台模板(附源码)
  • 身份证号与姓名实名认证接口-二要素实名认证-C++接口代码
  • 笑营宝高校选修课报名考勤系统源码开发方案
  • 类型字段定义影响WebApi传值及SqlSugar调用Select创建新对象
  • golang 函数式编程库samber/mo使用: IO
  • 在OceanBase使用中,如何优化因Join估算不准导致执行计划选错的问题
  • potplayer安装
  • PostgreSQL 与MySQL 对比使用
  • 配置nginx代理访问openai接口
  • 使用Python语言实现一个基于动态数组的序列队列
  • 面试数据库篇(mysql)- 07索引创建原则与失效及优化
  • 《互联网的世界》第三讲-tcp
  • JOSEF约瑟 JZS-7G-42 AC220V静态可调延时中间继电器 端子式导轨安装15ms-10s
  • Hudi配置参数优化
  • 适用Java SpringBoot项目的分布式锁
  • 面试笔记系列二之java基础+集合知识点整理及常见面试题
  • 搭建LNMP环境并搭建论坛和博客
  • 蓝桥杯刷题2
  • 低代码与国产化部署:软件开发的未来趋势与应用实践
  • 【Python笔记-设计模式】迭代器模式
  • Linux基本指令(上)
  • 浅谈XSS简单漏洞xss-labs-master(初级)