【办公类-30-01】(Python)大班毕业证书批量打印(幼儿信息、性别、毕业日期、学校、公章、签名、证书日期)

news2024/11/16 13:55:39

背景需求

大班毕业在即,需要打印大班幼儿毕业证书。(已有打印好的彩色证书)

常规操作模式:

1,统一盖章,反复签字

200份证书,每张证书上需要盖园所章、园长签字200次

 2.  每个班主任自己领取班级人数的毕业证书纸张,制作Word模板

(1)模板固定的信息:年龄、毕业年份、学校、日期,

(2)模板中替换的信息:幼儿名字、性别,需要打印一份,然后再修改名字和性别,再打印一份)

 存在问题:

1、重复盖章、签字,费时费力:总务老师盖章、手都酸了。园长签字,手指麻了。

2、教师打印替换名字,费时费力:去年我也是大班老师,手动操作修改名字,再一个一个打印,不仅担心打印错误。还需要两位老师共同配合,一张一张放纸(证书纸不多)

小结:传统毕业证打印,存在耗费人工的问题(批量盖章、批量签名、分散替换打印)。

因此我希望用Python批量功能,实现200多份名册的批量打印。

材料准备:

、扫描图片准备(签名、公章、毕业证图片版)

二、WORD模板准备

(1)插入证书模板

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

姓名、性别用{{name}}{{sex}},年龄、毕业日期、学校、证书日期都是固定不修改的,就用预设文字、数字 

 (3)插入“”公章PNG格式”和“签名png格式”

 

 模板做好了

 三、EXCLE模板准备

收集所有班级的毕业证名单(一共8个大班) 

EXCLE内部样式:

三、代码展示:

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

用法:选择一个大班的EXCLe模板,输入一个班级的所有名单PDF。

 代码展示:


 # -*- coding:utf-8 -*- 1 
'''
目的:大班毕业证书(一个班级单独打印)
作者:阿夏
日期:2023年6月12日 21:54
'''


# 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹
from docxtpl import DocxTemplate
import pandas as pd
import os
import time
# 
numnum=int(input('班级(阿拉伯数字1,2,3,4,5,7,8,9)\n'))

zpath=os.getcwd()+'\\'
zpath=r'D:\test\03办公类\11毕业册'+'\\'

file_path=zpath+r'\零时Word'

# 二、遍历excel,逐个生成word(form.docx是前面的模板)
try:
    os.mkdir(file_path)
except:
    pass

tpl = 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 os
from PyPDF2 import PdfFileMerger
target_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 shutil
shutil.rmtree('D:/test/03办公类/11毕业册/零时Word') #递归删除文件夹,即:删除非空文件夹







终端输入:

 

结果显示: 

 

 打印效果:

 

 

(二)多份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:
        pass

    tpl = 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 os
    from PyPDF2 import PdfFileMerger
    target_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 shutil
    shutil.rmtree('D:/test/03办公类/11毕业册/零时Word') #递归删除文件夹,即:删除非空文件夹








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

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

 PDF样式:

  

使用反馈

前来领取证书的大班老师纷纷表示感谢

1、不用手动修改:“你这样打掉了,我们就不用一个名字一个名字修改了,不用担心打错了,没有证书纸!”

2、不用等候盖章:“这下,不用把证书拿去给领导敲章、签名,方便多了!”

3、生成速度极快:“这么快就打好了?你真牛!”(运行程序1分钟,打印1分钟)

小结:

     批量自动生成的班级幼儿名单PDF(一个班级28-33人一份连续的PDF),教师可以直接用彩色打印机(横版、色彩、单面、全部)在彩色毕业证模板上打印添加幼儿信息及彩色签名和公章。极大提高了“毕业证制作效率”

 技术改变生活 智慧创造未来!


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/642505.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

彻底弄懂 JavaScript 异步任务处理原理

目录 1.单线程 什么是单线程? 2.同步和异步 同步 异步 3.事件循环(EventLoop) 1.事件循环的基本概念 2.微任务/宏任务 3.宏任务和微任务的执行顺序 4.常见的面试题 1.单线程 首先我们需要明白JS是单线程的,这是为了降低程序复杂性&#xff0c…

Windows上安装绿色版mysql-8.0.26

以8.0.26为例 1.安装包下载 下载地址:https://dev.mysql.com/downloads/mysql/下载后文件如图所示: 解压压缩包,并修改文件夹名称为mysql: 2.创建配置文件 在E:\mysql(MySQL解压目录)文件夹下&#…

VS Code 实用快捷键

在使用VS Code 开发过程中,熟练使用一些快捷键可以极大的便利我们的开发。所以,本文汇总了一些快捷键,以便想使用时忘记了可以快速查找到。 1. Alt 鼠标点击 在每一个点击的地方添加输入光标 2. Alt Shift 鼠标左键按住拖动 竖列多行选择。…

达梦数据库无法打开图形化界面的解决方法

在安装或使用DM数据库中,我们经常会需要使用图形化界面,但某些情况下,我们可能会打开图形化界面失败。本文分别介绍通过VNC或者VMware连接数据库服务器,和使用Xmanager第三方工具连接服务器打开图形化界面的方法。实验环境的操作系…

【ARM AMBA AXI 入门 6 - AXI3 协议中的锁定访问之AxLOCK信号】

文章目录 1.1 Locked accesses 1.1 Locked accesses 当主机使用 AxLOCK 信号来指示事务是锁定的事务时,互连(Interconnect)必须确保只有该主机可以访问目标从属区域,直到来自同一主机的未锁定事务完成。互连中的仲裁器(arbiter)必须执行此限制。 在主机…

【面试题】前端面试 15 问高频题

大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 数组去重 遍历旧数组,然后拿着旧数组元素去查询新数组,如果该元素…

Linux安装mysql8

Linux安装mysql8 第一步:解压mysql安装包:tar -xvf mysql-server-8.0.25.tar.gz 第二步:更新文件夹名:mv mysql-server-8.0.25 mysql 第三步:进入mysql文件夹:cd mysql,创建data文件夹&#x…

OM6621PW蓝牙智能指纹锁(附芯片选型)

随着科技的快速发展,智能家居正逐渐成为现代生活的一部分。在智能家居领域,安全始终是人们关注的焦点。传统的机械锁存在被暴力破解、易被复制钥匙等安全隐患,无法满足当今社会对安全性的需求。因此,越来越多的家庭和商业场所开始…

【vue3】12-Vue 3中的Composition Api(二)

Vue3 - composition Api setup中的函数(1)computed函数使用(2)setup获取元素或组件(3)组件的生命周期函数(4)provide/inject函数(了解)(5&#xf…

Java实现PPT转MP4文件

环境要求 必须是Windows电脑&#xff0c;已安装微软Office且已激活。 引入Jar 首先在pom中引入jar包 <dependency><groupId>cc.pptshow</groupId><artifactId>pptshow</artifactId><version>1.3</version> </dependency> …

【2023年计划大纲】2023年技术笔记大纲

2023年技术笔记写作计划 按照技术类型&#xff0c;计划写以下三个领域的笔记&#xff1a; &#xff08;1&#xff09;AUTOSAR标准体系的专业知识&#xff0c;T-BOX,BMS,VCU这几个产品的设计和核心开发。包括UDS协议&#xff0c;XCP协议&#xff0c;OS操作系统。 每一个产品和…

测试工程师常见的面试问题及回答建议

说起软件测试近几年的发展&#xff0c;其实已悄无声息地发生了巨大的变化。前几年随着互联网行业的迅猛发展&#xff0c;软件测试人才稀缺&#xff0c;低门槛高薪资促使大批毕业生和转行人员一窝蜂地涌入。而现在&#xff0c;软件测试发展太快&#xff0c;纵观各大招聘网站&…

Prompt是什么_揭秘Prompt:大模型时代的关键技术与实践应用

文章目录 1 Prompt是什么Prompt的定义和基本概念Prompt的工作原理 2 综合案例案例1&#xff1a;根据内容提取数据生成表格百度&#xff1a;文心一言科大讯飞&#xff1a;讯飞星火 案例2&#xff1a;文生图百度&#xff1a;文心一言科大讯飞&#xff1a;讯飞星火 案例3&#xff…

如何建立一个好的待办事项系统并提高工作效率

如果你有一系列的任务需要完成&#xff0c;你会如何记住它们呢&#xff1f; 最简单的方法当然是将它们记在脑中&#xff0c;但如果任务的数量很多&#xff0c;记忆的细节难免模糊。纸和笔也是一个不错的选择&#xff0c;但纸质的任务清单容易遗失或者损坏。让应用来帮忙当然也…

ubuntu iptables开机自启动

一、配置ubuntu路由转发 用在一台电脑有多个网卡的情形下&#xff0c;一个网卡5网段、一个网卡8网段&#xff0c;8网段是网络出口&#xff0c;所以5网段的设备需要入网的话&#xff0c;要路由转发。 sudo iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -j SNAT --to-sou…

对于中小企业,如何管理好仓库?

对于中小企业&#xff0c;如何管理好仓库&#xff1f; 在制造业摸爬滚打的这些年&#xff0c;也拜访了不少客户&#xff0c;帮助不少企业做了数字化方案&#xff0c;正如题主所说&#xff0c;“仓库是每一个经销商的根据地&#xff0c;如果不把仓库管理好&#xff0c;那么整个…

产品经理认证NPDP考试心得

什么是NPDP&#xff1f; 产品经理国际资格认证NPDP&#xff08;New Product Development Professional&#xff09;&#xff0c;由美国产品开发与管理协会&#xff08;PDMA&#xff09;所发起&#xff0c;是国际公认的新产品开发专业认证。 NPDP考试简介 考试方式&#xff1a…

C语言实现顺序表与链表创建

线性表 用于存储若干相同属性元素的有序序列称为线性表。 线性表特征&#xff1a; 存在唯一的第一个元素&#xff1b;存在唯一的最后一个元素&#xff1b;除第一个序列的每一个元素元素都有一个前驱元素&#xff0c;后一个都有一个后继元素。 顺序表 线性表的顺序表示指的…

智慧矿山成行业新趋势,千寻位置助力企业数字化转型

随着政策推动和科技发展&#xff0c;智慧矿山已成为矿业行业的趋势和未来的方向。 智慧矿山就是以矿山数字化、信息化为前提和基础&#xff0c;对矿山生产、人员健康与安全、技术支持与后勤保障等进行主动感知、自动分析、快速处理&#xff0c;最终实现安全矿山、无人矿山、高效…

java设计模式之:访问者模式

前言 关于设计模式&#xff0c;我们得结合生活中的案例来学习&#xff1b;最近我在网上也看了不少文章&#xff0c;今天想跟大家分享一下关于访问者模式的一些知识&#xff0c;先来看一个简单的案例吧。 相信大家都去过医院&#xff0c;看完病&#xff0c;医生都会给我们开一…