作品展示——米羅可兒證書打印幼兒姓名
?
背景需求?
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模板也變小了。
去年打印大班畢業證書時,可能證書紙張也比a4小,所以造成了打印時無數次調整{{}}的擺放位置。
?三、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') #遞歸刪除文件夾,即:刪除非空文件夾