【教学类-35-21】20240901 中2班描字帖(学号+姓名、虚拟姓名、杨任东竹石体 Regular)

news2024/11/16 2:28:43

背景需求:

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

考虑带中4班时,他们已经是下学期了,所以描汉字,现在是中2班孩子是上学期,所以我就只让他们描学号数字

微软雅黑的“1”有一个弯钩(其他数字都符合书写标准),所以这次我想换掉常用的加粗字体“微软雅黑”,选择“杨任东竹石体 Regular”

【教学类-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的斜线弯曲,应该是直线

素材模版

第一步:修改WORd模板

把最上面的学号姓名格子变成隐藏框线

第二步 制作学生名单

为了保护隐私,我用星火讯飞,随机生成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)

每次生成的名字都不同。

我用了这一套29个名字,复制到EXCLE学生给名单里

(因为只有29个学生,是单数,本代码必须是双数才能复制,因此将29号复制了一次)

代码展示


'''
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) #递归删除文件夹,即:删除非空文件夹`

生成时间很长……

重点说明:

1、本次描字帖的名字字号很大,学号字号较小

2、为了能够挑选,我做了两套字体——微软雅黑和杨任东竹石体

生成文件

效果展示

1、微软雅黑字帖


必须双数

2、杨任东竹石体字帖

字体样式比较分析

1.杨任东字体更好看,符合书写的样式,但是它显示出来的字体大小始终比同样字号的微软雅黑小。

2.不过我之前都是用微软雅黑或黑体,都是加粗字体,本次就想试试杨仁东字体这种线条细腻的字体,看看幼儿描写的效果。

结论:还是打印“杨任东竹石体”的描字帖

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

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

相关文章

--- 数据结构 链表 --- java

与顺序表相比,链表的最大优点就是不会存在空间的浪费 链表是通过将一个一个储存数据的节点(对象)连起来(通过记录下他们的地址),这些数据在逻辑上就是线性的,但在物理上不是,因为地…

[Leetcode 216][Medium]组合总和 III--回溯(组合问题)

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 对于组合问题,首先要想到回溯法。那么可以根据回溯法模版进行设计。 void backtrace(元素){if(满足题目要求的条件){保存目前路径/状态/结果;return;}for循环,往目前状态相邻的所…

9-8 束搜索

贪心搜索 穷举搜索 束搜索 小结 序列搜索策略包括贪心搜索、穷举搜索和束搜索。 贪心搜索所选取序列的计算量最小,但精度相对较低。 穷举搜索所选取序列的精度最高,但计算量最大。 束搜索通过灵活选择束宽,在正确率和计算代价之间进行权衡…

栈和队列——用队列实现栈

题目中给出,让我们应用两个队列实现栈,首先我们先来想一下,栈是先进后出,队列是先进先出。所以我们就需要应用两个队列来回导才能实现栈的特点。因为这道题是基于队列来实现的,所以在下方若有看不懂的函数名称可以去栈…

Java 入门指南:Java 并发编程 —— Synchronized 实现悲观锁(Pessimistic Locking)

悲观锁 悲观锁(Pessimistic Locking)是一种悲观的并发控制机制,它基于悲观的假设,即并发冲突会时常发生,因此在访问共享资源(如数据库记录或共享变量)之前,会先获取独占性的锁&…

数组结构第一周做题总结_基础练习

错误的原因是写了无参构造函数但是没有实现 id:8 A. 月份查询(指针数组) 题目描述 已知每个月份的英文单词如下,要求创建一个指针数组,数组中的每个指针指向一个月份的英文字符串,要求根据输入的月份数字输出相应的…

盘点java8 stream中隐藏的函数式接口

shigen坚持更新文章的博客写手,记录成长,分享认知,留住感动。个人IP:shigen 提到函数式接口,最常见的就是lambda表达式,IDEA也有智能的提示: 最后改成这样的就是最简洁的、IDEA希望的风格&#…

机器学习:基于机器学习的中文评论情感分析

通过机器学习技术对中文评论进行情感分析。我们使用了jieba进行中文分词,移除了停用词,并利用词袋模型(Bag of Words)和多项式朴素贝叶斯分类器对评论进行了情感分类。实验结果表明,该模型在测试集上达到了较高的准确率…

如何构建高效的中药材进存销管理系统?——运用Java SpringBoot和Vue实现库存实时监控,简化销售流程,提升药材管理效率。

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

前端宝典二十一:前端异步编程规范手写Promise、async、await

本文主要探讨前端异步编程的处理方式、处理场景,并且手写Promise的全家桶,介绍async、await方法使用 一、异步处理方式有: 1. 回调函数 function fetchDate(callback) {setTimeout(() > {const date new Date();callback(date);}, 100…

SpringSecurity Oauth2 - 密码模式完成身份认证获取令牌 [自定义UserDetailsService]

文章目录 1. 授权服务器2. 授权类型1. Password (密码模式)2. Refresh Token(刷新令牌)3. Client Credentials(客户端凭证模式) 3. AuthorizationServerConfigurerAdapter4. 自定义 TokenStore 管理令牌1. TokenStore 的作用2. Cu…

嵌入式Linux C应用编程指南-高级I/O(速记版)

第十三章 高级I/O 13.1 非阻塞I/O 阻塞其实就是进入了休眠状态,交出了 CPU 控制权。比如 wait()、pause()、sleep()等函数都会进入阻塞。 阻塞式 I/O 顾名思义就是对文件的 I/O 操作(读写操作)是阻塞式的,非阻塞式 I/O 同理就是对…

SpringSecurity Oauth2 - 访问令牌续期

文章目录 1. 访问令牌的续期2. CustomUserDetailsService3. 配置 AuthorizationServerEndpointsConfigurer4. 测试项目 1. 访问令牌的续期 在Spring Security OAuth2中,访问令牌的续期通常是通过使用**刷新令牌(Refresh Token)**来实现的。当…

走进酒厂,探寻白酒酿造的奥秘

在华夏大地深处,隐藏着一座座充满神秘色彩的酒厂,它们是白酒酿造的地方,也是中华酒文化的摇篮。今天,就让我们一起走进这些酒厂,探寻白酒酿造的奥秘,感受豪迈白酒(HOMANLISM)的不同魅…

当网络适配器的Wireless出现感叹号

1.出现如下情况 链接: :一招搞定Intel(R) Wireless-AC 9560显示感叹号,无法打开wifi模块!_intel(r)wireless-ac9560感叹号-CSDN博客z 重点: 原因是因为电脑静电的问题。

昇腾AI处理器的计算核心 - AI Core即DaVinci Core

昇腾AI处理器的计算核心 - AI Core即DaVinci Core flyfish 从一段代码的解释开始 template <typename T> class GlobalTensor { public:void setGlobalBuffer(T* buffer, uint32_t buffersize) {// 在这里实现设置全局缓冲区的逻辑} };语法的说明&#xff0c;主要用于…

封装_私有类字段和方法

前言 在 JavaScript 中&#xff0c;封装、私有类字段和方法是面向对象编程的一种重要特性。它们允许你将数据&#xff08;属性&#xff09;和对数据的操作&#xff08;方法&#xff09;组合在一起&#xff0c;并控制访问权限&#xff0c;从而提高代码的安全性和可维护性。私有…

异步编程详解

1.什么是async std::async:是一个函数模板,用于启动一个异步任务。它接受一个可调用的对象(如函数、Lambda表达式、函数对象)作为参数,并在一个单独的线程上异步执行对象。std::async自动管理异步任务的生命周期,并返回一个std::future对象,该对象用于获取异步操作的结果。 2.什…

【Java】—— Java面向对象进阶:继承小练习-Java中实现圆柱体类及其体积计算

目录 1. 定义圆类&#xff08;Circle&#xff09; 2. 定义圆柱体类&#xff08;Cylinder&#xff09; 3. 测试圆柱体类 4. 总结 在Java中&#xff0c;我们可以通过面向对象的方式来模拟现实世界中的物体&#xff0c;比如圆柱体。本篇文章将通过一个简单的示例来展示如何定义…

全国大学生数学建模竞赛系统使用手册

注意&#xff01;国赛是学校统一报名&#xff0c;所以如果在操作上有任何不清楚的地方&#xff0c;一定要在赛前即使询问自己学校组织数模的老师&#xff01;并详细阅读本文和官网通知&#xff0c;以及&#xff1a;数模国赛提交MD5码和论文的坑&#xff01; 数模比赛的建模手、…