【辦公類-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模板也變小了。

去年打印大班畢業證書時,可能證書紙張也比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') #遞歸刪除文件夾,即:刪除非空文件夾

終端顯示(不用輸入信息,直接運行即可)

?最后生成的結果——8個班級的PDF格式

?PDF樣式:

??


?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712856.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++數據結構與算法——二叉搜索樹的屬性

C第二階段——數據結構和算法,之前學過一點點數據結構,當時是基于Python來學習的,現在基于C查漏補缺,尤其是樹的部分。這一部分計劃一個月,主要利用代碼隨想錄來學習,刷題使用力扣網站,不定時更…

C++編程面試復盤:數組降重+快排+函數指針+類模板

面試真題 真題1 #include <iostream> // 在函數 find_repetnum 的參數列表中&#xff0c;int& length 中的 & 符號表示引用。通過將 length 聲明為引用&#xff0c;函數可以修改傳入的 length 變量的值&#xff0c;并且這種修改會在函數外部生效。 void find_r…

Vue2:路由history模式的項目部署后頁面刷新404問題處理

一、問題描述 我們把Vue項目的路由模式&#xff0c;設置成history 然后&#xff0c;build 并把dist中的代碼部署到nodeexpress服務中 訪問頁面后&#xff0c;刷新頁面報404問題 二、原因分析 server.js文件 會發現&#xff0c;文件中配置的路徑沒有Vue項目中對應的路徑 所以…

React withRouter的使用及源碼實現

一 基本介紹 作用&#xff1a; 把不是通過路由切換過來的組件中&#xff0c;將react-router 的 history、location、match 三個對象傳入props對象上。比如首頁&#xff01; 默認情況下必須是經過路由匹配渲染的組件才存在this.props&#xff0c;才擁有路由參數&#xff0c;才能…

嵌入式學習筆記Day27

今天主要學習了進程間的通信&#xff0c;主要學習了通過管道進行通信 一、進程間的通信 進程間的通信方式有以下幾種&#xff1a; 1.管道 2.信號 3.消息隊列 4.共享內存 5.信號燈 6.套接字二、管道 2.1無名管道 無名管道只能用于具有親緣關系的進程間通信 函數接口&#x…

Nacos進階

目錄 Nacos支持三種配置加載方案 Namespace方案 DataID方案 Group方案 同時加載多個配置集 Nacos支持三種配置加載方案 Nacos支持“Namespacegroupdata ID”的配置解決方案。 詳情見&#xff1a;Nacos config alibaba/spring-cloud-alibaba Wiki GitHub Namespace方案…

《TCP/IP詳解 卷一》第12章 TCP初步介紹

目錄 12.1 引言 12.1.1 ARQ和重傳 12.1.2 滑動窗口 12.1.3 變量窗口&#xff1a;流量控制和擁塞控制 12.1.4 設置重傳的超時值 12.2 TCP的引入 12.2.1 TCP服務模型 12.2.2 TCP可靠性 12.3 TCP頭部和封裝 12.4 總結 12.1 引言 關于TCP詳細內容&#xff0c;原書有5個章…

【C++ map和set】

文章目錄 map和set序列式容器和關聯式容器鍵值對setset的主要操作 mapmap主要操作 multiset和multimap map和set 序列式容器和關聯式容器 之前我們接觸的vector,list,deque等&#xff0c;這些容器統稱為序列式容器&#xff0c;其底層為線性序列的的數據結構&#xff0c;里面存…

【LV14 day4 字符設備驅動基礎框架】

一、字符設備驅動框架解析 設備的操作函數如果比喻是樁的話&#xff08;性質類似于設備操作函數的函數&#xff0c;在一些場合被稱為樁函數&#xff09;&#xff0c;則&#xff1a; 驅動實現設備操作函數 ----------- 做樁 insmod調用的init函數主要作用 --------- 釘樁 rm…

都說了能不動就別動,非要去調整,出生產事故了吧

MyBatis 替換成 MyBatis-Plus 背景介紹 一個老項目&#xff0c;數據庫用的是 MySQL 5.7.36 &#xff0c; ORM 框架用的 MyBatis 3.5.0 &#xff0c; mysql-connector-java 版本是 5.1.26 新來了一個干練的小伙&#xff0c;精力充沛&#xff0c;看著就是一個喜歡折騰的主 他…

leetcode 3.1

leetcode hot 100 雙指針1.三數之和2.接雨水 多維動態規劃1.最長公共子序列 雙指針 1.三數之和 三數之和 排序 雙指針的方法&#xff0c;固定一個數nums[i], 用兩數和找target - nums[i] 的數需要注意兩點: 1.需要去掉重復數字 while (l < r && nums[l] nums[…

社交APP開發能給用戶帶來什么

現在的社交軟件也非常的多&#xff0c;每款社交軟件都有自己的特色&#xff0c;社交軟件是日常中必備的軟件&#xff0c;不管是生活交流還是感情工作交流都是比較方便的&#xff0c;因為社交軟件滿足了日常的遠程交流問題&#xff0c;所以開發社交軟件也會逐漸的流行起來的。 …

Error: T doesn‘t have .length

Error: T doesn‘t have .length 在 TypeScript 中&#xff0c;當我們使用泛型 <T> 時&#xff0c;有時會遇到一個常見問題&#xff1a;編譯器提示錯誤&#xff0c;指出泛型類型 T 不具備 .length 屬性。在本文中&#xff0c;我們將探討這個問題的解決方案&#xff0c;并…

【Qt學習】QLCDNumber的介紹與實例使用(倒計時功能)

文章目錄 1. 介紹2. 實例 - QLCDNumber倒計時3. 資源文件 1. 介紹 QLCDNumber是Qt框架中用于顯示數字的控件&#xff0c;它模擬了一個液晶數字顯示屏。 在Designer界面中顯示如下&#xff1a; 有以下 常用屬性&#xff1a; 屬性描述intValue獲取或設置QLCDNumber顯示的整數…

Redis高級特性詳解:事務處理、發布訂閱、持久化和集群

Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的基于內存的數據結構存儲系統&#xff0c;被廣泛應用于緩存、隊列、計數器等場景中。除了基本的鍵值存儲功能外&#xff0c;Redis還提供了許多高級特性&#xff0c;包括事務處理、發布訂閱、持久化和集群。在…

js截取圖片地址后面的參數和在路徑中截取文件名或后綴名

文章目錄 前言截取地址 &#xff1f;后面的參數在路徑中截取文件名或后綴名總結 前言 在處理網頁上的圖片資源或者其他類型的文件資源時&#xff0c;你可能會遇到需要使用這些技巧的情況。以下是一些具體的使用場景&#xff1a; 動態修改圖片參數&#xff1a;如果你有一個圖片U…

【BBuf的CUDA筆記】十四,OpenAI Triton入門筆記三 FusedAttention

0x0. 前言 繼續Triton的學習&#xff0c;這次來到 https://triton-lang.org/main/getting-started/tutorials/06-fused-attention.html 教程。也就是如何使用Triton來實現FlashAttention V2。對于FlashAttention和FlashAttention V2網上已經有非常多的介紹了&#xff0c;大家如…

Win11系統安裝安卓子系統教程

隨著Win11系統的不斷普及&#xff0c;以及硬件設備的更新換代&#xff0c;我相信很多同學都已經更新并使用到了最新的Win11系統。那么&#xff0c;Win11系統最受期待的功能“Windows Subsystem for Android”&#xff08;簡稱WSA&#xff09;&#xff0c;即《安卓子系統》。他可…

spring.factories的常用配置項

概述 spring.factories 實現是依賴 spring-core 包里的 SpringFactoriesLoader 類&#xff0c;這個類實現了檢索 META-INF/spring.factories 文件&#xff0c;并獲取指定接口的配置的功能。 Spring Factories機制提供了一種解耦容器注入的方式&#xff0c;幫助外部包&am…

掘根寶典之C語言字符串輸入函數(gets(),fgets(),get_s())

字符串輸入前的注意事項 如果想把一個字符串讀入程序&#xff0c;首先必須預留該字符串的空間&#xff0c;然后用輸入函數獲取該字符串 這意味著必須要為字符串分配足夠的空間。 不要指望計算機在讀取字符串時順便計算它的長度&#xff0c;然后再分配空間(計算機不會這樣做&a…