当前位置: 首页 > 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样式:

  


 

相关文章:

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

作品展示——米罗可儿证书打印幼儿姓名 背景需求 2024年3月1日,中4班孩子一起整理美术操作材料《米罗可儿》的操作本——将每一页纸撕下来,分类摆放、确保纸张上下位置正确。每位孩子们都非常厉害,不仅完成了自己的一本,还将没有…...

js【详解】数据类型原理(含变量赋值详解-浅拷贝)

JavaScript 中的数据按存储方式的不同,分为值类型和引用类型。 值类型(共 6 种):赋值的时候传值 —— 数字、字符串、布尔值、null 、undefined,Symbol引用类型(仅 1 种):赋值的时候…...

SAM 影像分割——地理空间数据的分段模型的数据调参和自动分割分析

本笔记本展示了如何使用 Segment Anything Model (SAM) 从图像中分割对象,只需几行代码即可完成。 请确保在本笔记本中使用 GPU 运行时。对于 Google Colab,请转到运行时 -> 更改运行时类型,然后选择 GPU 作为硬件加速器。 地理空间数据的分段模型 Segment Anything M…...

Java底层自学大纲_设计模式篇

设计模式专题_自学大纲所属类别学习主题建议课时(h) A 深入理解设计模式001 SOLID设计原则和策略模式2.5 A 深入理解设计模式002 责任链模式2.5 A 深入理解设计模式003 工厂模式和模版方法模式2.5 A 深入理解设计模式004 装饰者模式2.5 A 深入理解设…...

详解字符串函数<string.h>(上)

1. strlen函数的使用和模拟实现 size_t strlen(const char* str); 1.1 函数功能以及用法 字符串长度 strlen函数的功能是计算字符串的长度。在使用时&#xff0c;要求用户传入需要计算长度的字符串的起始位置&#xff0c;并返回字符串的长度。 #include <stdio.h> #…...

1、docker入门

文章目录 1、tocker简介2、tocker的安装&环境配置2、配置阿里云镜像3、基本命令1、镜像命令2、docker基本命令3、镜像基本命令4、Docker 容器常用命令 1、tocker简介 新一代的虚拟化技术 2、tocker的安装&环境配置 uname -r1、首先查看liunx的内核 yum update -y2、更…...

Qt应用软件【测试篇】cppchecker静态代码检查

文章目录 cppcheker简介下载地址与安装检查项目QT Creator使用CPP Cheker开启检查常见错误总结错误信息说明cppcheker简介 Cppcheck 是一个用于 C/C++ 代码的分析工具。它提供独特的代码分析以检测错误,并专注于检测未定义的行为和危险的编码结构。其目标是仅检测代码中的真实…...

[递推与递归]数的计算

题目描述 给出正整数 n&#xff0c;要求按如下方式构造数列&#xff1a; 只有一个数字 n 的数列是一个合法的数列。在一个合法的数列的末尾加入一个正整数&#xff0c;但是这个正整数不能超过该数列最后一项的一半&#xff0c;可以得到一个新的合法数列。 请你求出&#xff…...

Cocos Creator 3.8.x 后效处理(前向渲染)

关于怎么开启后效效果我这里不再赘述&#xff0c;可以前往Cocos官方文档查看具体细节&#xff1a;后效处理官网 下面讲一下怎么自己定义一个后处理效果&#xff0c;想添加自己的后效处理的话只需要在postProcess节点下添加一个BlitScreen 组件即可&#xff0c;然后自己去添加自…...

【前端素材】推荐优质后台管理系统 Adminity平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理网站、应用程序或系统的管理界面&#xff0c;通常由管理员和工作人员使用。它提供了访问和控制网站或应用程序后台功能的工具和界面&#xff0c;使其能够管理用户、内容、数据和其他各种功能。 2、功能需求 后台管理系…...

身份证号与姓名实名认证接口-二要素实名认证-C++接口代码

翔云&#xff08;https://www.netocr.com/idenNoOrd.html&#xff09;身份证二要素实名认证接口在当今的数字化社会中扮演着至关重要的角色&#xff0c;它不仅守护着网络世界的秩序&#xff0c;也悄然影响着现实生活的点滴。看似普通的身份证号实名认证接口也在悄然守护着人们的…...

笑营宝高校选修课报名考勤系统源码开发方案

一、项目背景与目标 &#xff08;一&#xff09;项目背景 随着高等教育的普及和教学模式的不断创新&#xff0c;高校选修课程体系日趋复杂多变。学生对课程选择的自由度提高&#xff0c;使得传统的选课和考勤管理方式变得繁琐且效率低下。目前&#xff0c;许多高校仍然采用纸…...

类型字段定义影响WebApi传值及SqlSugar调用Select创建新对象

ASP.NET Core编写的WebApi&#xff0c;由于输入参数较多&#xff0c;专门定义了输入参数类并设置[FromBody]方式传值&#xff0c;但测试时始终无法通过postman将输入参数值传递给WebApi&#xff0c;condition对象的所有属性值一直都为空。同时在WebApi内部调用SqlSugar查询数据…...

golang 函数式编程库samber/mo使用: IO

golang 函数式编程库samber/mo使用&#xff1a; IO 如果您不了解samber/mo库&#xff0c; 请先阅读第一篇 Option 在函数式编程中&#xff0c;副作用和纯函数是最常见的概念。 IO用来封装IO这类副作用。 什么是副作用 副作用是在计算结果的过程中&#xff0c;改变了系统状态…...

在OceanBase使用中,如何优化因Join估算不准导致执行计划选错的问题

作者&#xff1a;胡呈清&#xff0c;爱可生公司旗下的DBA团队成员&#xff0c;擅长故障分析和性能优化。爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。本文约 1600 字&#xff0c;预计阅读需要 15 分钟。 数据库版本&…...

potplayer安装

官网 解压运行即可...

PostgreSQL 与MySQL 对比使用

一、前言 博主的系统既有 用到MySQL 也有用到PostgreSQL &#xff0c;之所以用到这两种数据库&#xff0c;主要是现在都是国产替代&#xff0c;虽然说这两款数据库也不是国产的&#xff0c;但是相对开源&#xff0c;oracle是不让用了。所以现在使用比较多的就是这两个关系型数据…...

配置nginx代理访问openai接口

环境&#xff1a; 阿里云硅谷地区服务器&#xff0c;ubuntu22 操作步骤 1.安装nginx apt install nginx2.编辑文件/etc/nginx/sites-enabled/default&#xff0c;内容替换如下 server {listen 80;location / {proxy_pass https://api.openai.com;proxy_set_header Host api.…...

使用Python语言实现一个基于动态数组的序列队列

一、动态数组的实现 首先&#xff0c;我们需要创建一个DynamicArray类&#xff0c;该类将管理我们的动态数组。 动态数组能够动态地调整其大小&#xff0c;以容纳更多的元素。 目录 一、动态数组的实现 代码示例&#xff1a; 二、序列队列的实现 接下来&#xff0c;我…...

面试数据库篇(mysql)- 07索引创建原则与失效及优化

索引创建原则 1). 针对于数据量较大,且查询比较频繁的表建立索引。 2). 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。 3). 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。 4). 如果是字符…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...