![](https://i-blog.csdnimg.cn/direct/97479be929ab49c685adc3699f6ff8c0.png)
背景需求:
8月底通知我成为中2班的班主任,为了快速识别幼儿的脸、姓名、学号,再次制作描字帖,并拍照。
最近做的一份字帖是中4班描字帖
【教学类-35-20】20240328 中4班描字帖(学号+姓名 A4竖版2份 横面)+裁剪纸条+插入式纸盒-CSDN博客文章浏览阅读643次,点赞16次,收藏7次。【教学类-35-20】20240328 中4班描字帖(学号+姓名 A4竖版2份 横面)+裁剪纸条+插入式纸盒
https://blog.csdn.net/reasonsummer/article/details/137117098?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22137117098%22%2C%22source%22%3A%22reasonsummer%22%7D
![](https://i-blog.csdnimg.cn/direct/0c8aadfbf4474eec9f7fee971fe9777c.png)
考虑带中4班时,他们已经是下学期了,所以描汉字,现在是中2班孩子是上学期,所以我就只让他们描学号数字
微软雅黑的“1”有一个弯钩(其他数字都符合书写标准),所以这次我想换掉常用的加粗字体“微软雅黑”,选择“杨任东竹石体 Regular”
![](https://i-blog.csdnimg.cn/direct/f2ecc2bd7e214dd4ab9c1d1825606096.png)
【教学类-44-11】20240324 杨任东竹石体 Regular(实线字体)制作的数字描字帖(AI对话大师缩略版)-CSDN博客文章浏览阅读1k次,点赞37次,收藏20次。【教学类-44-11】20240324 杨任东竹石体 Regular(实线字体)制作的数字描字帖(AI对话大师缩略版)
https://blog.csdn.net/reasonsummer/article/details/137022370?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22137022370%22%2C%22source%22%3A%22reasonsummer%22%7D
“杨任东竹石体 Regular”的1符合书写习惯,但是9的斜线弯曲,应该是直线
![](https://i-blog.csdnimg.cn/direct/b740378c4d594a6b8f7dc990f6d26982.png)
素材模版
![](https://i-blog.csdnimg.cn/direct/d80fa54c735943d1891c95cc872f1f20.png)
第一步:修改WORd模板
![](https://i-blog.csdnimg.cn/direct/11fef4ff9e504a9d9900dda0f140e270.png)
![](https://i-blog.csdnimg.cn/direct/3ca832d3f9a248e881e1e31d7d9d2ba3.png)
![](https://i-blog.csdnimg.cn/direct/274dda837ae54c4bb23737701f69b122.png)
把最上面的学号姓名格子变成隐藏框线
![](https://i-blog.csdnimg.cn/direct/fb1bc2f827db478ea6d44ec370589561.png)
第二步 制作学生名单
为了保护隐私,我用星火讯飞,随机生成29个名字(班里只有2-3个字的名字,就不考虑4个字名字)
'''
随机生成汉字姓名2-3个字
星火讯飞 阿夏
20240901
'''
import random
# 姓氏列表
surnames = ['赵', '钱', '孙', '李', '周', '吴', '郑', '王', '冯', '陈', '褚', '卫', '蒋', '沈', '韩', '杨', '朱', '秦', '尤', '许']
# 名字列表
names = ['大伟', '芳', '娜', '敏静', '秀英', '丽', '国强', '磊', '洋', '艳', '大勇', '建军', '人杰', '娟', '涛', '超', '明', '霞', '国平', '英刚', '桂英', '志明', '建国', '建华', '春梅']
# 生成名字函数
def generate_name():
name = ''
# 随机选择姓氏和名字长度
length = random.choice([2, 3])
if length == 2:
name += random.choice(surnames) + random.choice(names)
else:
name += random.choice(surnames) + random.choice(names)
return name
# 生成29个名字
names = [generate_name() for _ in range(29)]
print(names)
# ['褚静', '蒋霞娜', '秦伟', '钱建国娟', '王强娟', '周娜娟', '卫丽强', '蒋志明', '褚娟静', '郑军静', '钱涛刚', '卫明', '韩艳军', '杨艳', '尤建国磊', '尤伟', '李芳', '褚敏', '李军', '沈涛静', '褚伟志明', '韩超', '周丽勇', '卫建华敏', '郑春梅涛', '许伟', '许桂英洋', '褚刚', '陈建华']
# ['杨丽', '赵伟娟', '赵勇平', '王静', '蒋静芳', '赵超', '孙志明', '许强', '尤明秀英', '韩刚春梅', '许强', '沈桂英伟', '许娜芳', '沈娟', '吴洋桂英', '王涛', '王丽', '秦刚', '冯明建华', '褚建国', '杨娜强', '郑丽杰', '韩秀英芳', '卫艳', '蒋敏秀英', '周静娟', '尤桂英', '褚明', '蒋平']
for n in names:
print(n)
每次生成的名字都不同。
![](https://i-blog.csdnimg.cn/direct/f4752396f78f4b74bf17b294c994c8ae.png)
我用了这一套29个名字,复制到EXCLE学生给名单里
(因为只有29个学生,是单数,本代码必须是双数才能复制,因此将29号复制了一次)
![](https://i-blog.csdnimg.cn/direct/b9dc3900620147f290c4f65b4691e32a.png)
代码展示
'''
20240901中2班描字帖
作者:阿夏
时间:2024年9月1日
学号和姓名分开
'''
import xlwt
import xlrd
import os
import random
from win32com.client import constants,gencache
from win32com.client.gencache import EnsureDispatch
from win32com.client import constants # 导入枚举常数模块
import os,time
import docx
from docx import Document
from docx.shared import Pt
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn
# hs=int(input('一行2个,需要几行(1行,还有6行是表格)\n'))
print('----------第1步:新建一个临时文件夹------------')
# 新建一个”装N份word和PDF“的临时文件夹
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\描字帖'
new_path=path+r'\20240901中2班学号描字帖'
wb= xlrd.open_workbook(new_path+r"\学生名单.xlsx") #打开文件并返回一个工作蒲对象。open_workbook可以点进去看看函数里面的参数的含义之类的,很详细,英语不好的可以百度翻译,翻译出来的结果差不多。
sheet=wb.sheet_by_index(0) #通过索引的方式获取到某一个sheet,现在是获取的第一个sheet页,也可以通过sheet的名称进行获取,sheet_by_name('sheet名称')
col1=sheet.col_values(0)# 学号
col2=sheet.col_values(1)# 名字
# col3=sheet.col_values(2)# 班级
num=len(col1)-1 # 第一列去掉第一行
numberall=[]
# 生成 基本组:“学号+名字“
for num in range(1,len(col1)):
for x0 in range(1):
name00=str(int(col1[num])) +str(col2[num]) #学号和名字拼在一起, 1 张三
numberall.append(name00)
for x1 in range(16):
number1=int(col1[num])
numberall.append(number1) # 只要学号
for x2 in range(8):
b=' '
numberall.append(b) # 学号留两个空
print(numberall)
# 一个数组【】
gz=25
# 切开25人 一人16个数字
list1=[]
for fk in range(int(len(numberall)/gz)): # 一共26格子
list1.append(numberall[fk*gz:fk*gz+gz])
print(list1)
print(len(list1))
lists=[]
for r in range(int(len(list1)/2)):
lists.append(list1[r*2:r*2+2])
print(lists)
print(len(lists))
# # 25个数组【】
bg=[]
# 第一行的格子
a=['0000']
for z1 in a:
bg.append(z1)
# 第2-3行学号的格子16格子
for x in range(1,4):
for y in range(0,8):
z2='{}{}'.format('%02d'%x,'%02d'%y)
bg.append(z2)
print(bg)
print(len(bg))
# # ['0000', '0004', '0100', '0101', '0102', '0103', '0104', '0105', '0106', '0107', '0200', '0201', '0202', '0203', '0204', '0205', '0206', '0207', '0300', '0302', '0304', '0306', '0400', '0402', '0404', '0406']
T=[120,45]
F=['微软雅黑','杨任东竹石体-Regular']
for f in F:
target_path=path+r'\零时Word'
if not os.path.exists(target_path): # 判断存放图片的文件夹是否存在
os.makedirs(target_path) # 若图片文件夹不存在就创建
for n in range(int(num/2)):
doc = docx.Document(new_path+r"\中2班描字帖.docx")
for b in range(2):
table = doc.tables[b]
# print(p)
for t in range(len(bg)): # 0-gz
# print(list[t])
pp=int(bg[t][0:2]) # 提取表格bg里面每个元素的第0个数字==单元格X坐标 t=索引数字
qq=int(bg[t][2:4])
k=lists[n][b][t]
# f=font[t]
print(pp,qq,k)
if pp==0 and qq==0:
run=table.cell(pp,qq).paragraphs[0].add_run(str(k)) # 在单元格0,0(第1行第1列)输入第0个名字
run.font.size = Pt(T[0]) #输入字体大小80或68号
run.font.name = f #输入时不字体
# run.bold=True
run.font.color.rgb = RGBColor(220,220,220) #设置颜色10%黑色=深灰
r = run._element
r.rPr.rFonts.set(qn('w:eastAsia'), f )#将输入语句中的中文部分字体变为华文行楷
table.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中
else:
run=table.cell(pp,qq).paragraphs[0].add_run(str(k)) # 在单元格0,0(第1行第1列)输入第0个名字
run.font.size = Pt(T[1]) #输入字体大小80或68号
run.font.name = f #输入时不字体
# run.bold=True
run.font.color.rgb = RGBColor(200,200,200) #设置颜色10%黑色=深灰
r = run._element
r.rPr.rFonts.set(qn('w:eastAsia'),f )#将输入语句中的中文部分字体变为华文行楷
table.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中
doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\描字帖\零时Word\{}.docx'.format('%02d'%n))#保存为XX学号的零时word
time.sleep(1)
from docx2pdf import convert
# docx 文件另存为PDF文件
inputFile = r"C:\Users\jg2yXRZ\OneDrive\桌面\描字帖\零时Word\{}.docx".format('%02d'%n)# 要转换的文件:已存在
outputFile = r"C:\Users\jg2yXRZ\OneDrive\桌面\描字帖\零时Word\{}.pdf".format('%02d'%n) # 要生成的文件:不存在
# 先创建 不存在的 文件
f1 = open(outputFile,'w')
f1.close()
# 再转换往PDF中写入内容
convert(inputFile, outputFile)
time.sleep(1)
from docx2pdf import convert
print('----------第4步:把都有PDF合并为一个打印用PDF------------')
import os
from PyPDF2 import PdfMerger
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 = PdfMerger()
for pdf in pdf_lst:
print(pdf)
file_merger.append(pdf)
# file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/描字帖/(打印合集)大班A整页描字帖2乘5加表格-4名字-({}人).pdf".format(num))
file_merger.write(path+fr"\(打印合集)中2班描字帖练习册({num}份{f}).pdf")
file_merger.close()
# doc.Close()
# # print('----------第5步:删除临时文件夹------------')
import shutil
shutil.rmtree(target_path) #递归删除文件夹,即:删除非空文件夹`
生成时间很长……
![](https://i-blog.csdnimg.cn/direct/be56f23e742b4741a566aa164a430f5a.png)
![](https://i-blog.csdnimg.cn/direct/66ef476a3ad841ac8b32f8f12702a9dc.png)
![](https://i-blog.csdnimg.cn/direct/b85e119b2a0047f2b8d09e45bc83aa0f.png)
重点说明:
1、本次描字帖的名字字号很大,学号字号较小
2、为了能够挑选,我做了两套字体——微软雅黑和杨任东竹石体
![](https://i-blog.csdnimg.cn/direct/2f1b7e37bf754f389ea1db942f9830bf.png)
生成文件
![](https://i-blog.csdnimg.cn/direct/e8fdb488f1294d53852e95d04cad90ef.png)
效果展示
1、微软雅黑字帖
![](https://i-blog.csdnimg.cn/direct/419367dcb2aa4bedadc2c8eb5ecf3f95.png)
![](https://i-blog.csdnimg.cn/direct/86a4ca4484124d83b76ca7c42b11cf53.png)
必须双数
![](https://i-blog.csdnimg.cn/direct/18f7a684d9d9406aba01efb2cbc41142.png)
2、杨任东竹石体字帖
![](https://i-blog.csdnimg.cn/direct/60aab9f451f54412afe1ed877cb42df1.png)
![](https://i-blog.csdnimg.cn/direct/1a21a7bdbb384321b8bc7091b8f2e57f.png)
![](https://i-blog.csdnimg.cn/direct/98d29aff5f3d4b409a569704afeb1b0b.png)
字体样式比较分析
1.杨任东字体更好看,符合书写的样式,但是它显示出来的字体大小始终比同样字号的微软雅黑小。
2.不过我之前都是用微软雅黑或黑体,都是加粗字体,本次就想试试杨仁东字体这种线条细腻的字体,看看幼儿描写的效果。
结论:还是打印“杨任东竹石体”的描字帖
![](https://i-blog.csdnimg.cn/direct/93c237a6299046bcbd3ad65d6ade7788.png)