【教学类-35-01】带笔画步骤图的描字(姓氏)(A4整张)

news2024/9/30 17:35:18

作品展示:

1、图片一行(0-6):文字简单,写3*4=12个字

2、图片2行(6-12):笔画适中,写3*3=9个字

3、图片3行(12-18):笔画适中,写3*3=9个字

 3、图片4行(18-24):笔画适中,写3*2=6个字

 WORD模板说明:

 

 0-6(1行图片)

6-12(2行图片)

 12-18(3行图片)

 18-24(4行图片)

 

 代码展示


 # -*- coding:utf-8 -*- 1 
'''
目的:幼儿名字姓氏笔画描画,有笔画步骤图
作者:阿夏
日期:2023年05月27日 21:54
'''

# 第一步:插入图片
import os
# sum=int(input('最大数字(6张、8张、10张、12张图片)\n'))
# size=float(input('图片尺寸(1.6、1.4、1.1、0.8)\n'))
# num=int(input('生成多少份(28人)\n'))
# Number=int(input('随机抽取几个图片(12个)\n'))
little=int(input('最小卡片(0、6、12,18)\n'))
big=int(input('最大卡片(6,12,18,24)\n'))
size=int(input('字体大小(120,140.120,140)\n'))

print('----------第1步:提取所有的名字步骤图png的路径------------')

path=[]
pathimg=[]
p=r"C:\Users\jg2yXRZ\OneDrive\桌面\下载幼儿姓氏笔画\中6姓名笔画总数"
# p=r'C:\Users\jg2yXRZ\OneDrive\桌面\下载幼儿姓氏笔画\演示名字图片'
# 过滤:只保留png结尾的图片
imgs=os.listdir(p)
for img in imgs:
    if img.endswith(".png"):
        # 0<=n<6:  #1行6个,实际5个  14张
        # 6<=n<12:#2行12个,实际12个  50张
        # 12<=n<18:#3行18个,实际17个   18张 合集82
        if str(img[3:5])=='01':
            # 提取“字序01”的汉字——也就是姓氏(这里只考虑单姓,不考虑司马一类的复姓)
            if little<=int(img[8:-4])<big:
                # 这里提取“单姓”的笔画数,不同的数量写入不同Word模板,让能够练习的汉字尽可能多。 
                path.append(p+'\\'+img)
                pathimg.append(img)
       
        else:
            pass
            # print('没有这样的字')
# 所有图片的路径
print(len(path))
print(path)
# print(pathimg)


# print('----------第2步:新建一个临时文件夹------------')
# # 新建一个”装N份word和PDF“的文件夹
os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\下载幼儿姓氏笔画\零时Word')

print('----------第2-3步:指定单元格写入图片、写入灰色文字 ------------')

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
import random

import os,time
import docx
from docx import Document
from docx.shared import Inches,Cm,Pt
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn

from docxtpl import DocxTemplate
import pandas as pd
from docx2pdf import convert
from docx.shared import RGBColor

name=[]
title=[]
for nn in range(len(path)):
    print(nn)    
    doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\下载幼儿姓氏笔画\幼儿名字笔画({}-{}).docx'.format(little,big))   

    table = doc.tables[0]          # 一页,写入一个名字

    pic=path[nn]     # 图片路径             
#            

    # 写入图片
    run=doc.tables[0].cell(1,0).paragraphs[0].add_run()        # 在第1个表格中第2行第1列单元格内插入步骤图
    run.add_picture('{}'.format(pic), width=Cm(19.3))            # 1.5的图片最多6个
    table.cell(1,0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中  


#     # 写入图片顶端的基本信息

    title.clear()
    xh1=pathimg[nn][0:2]     # 学号 格式01(学号)
    xh2=str(int(xh1))   # 学号 格式1 
    print(xh2)

    zx1=pathimg[nn][3:5]    # 字序 格式01(名字第一个字)
    zx2=str(int(zx1))   # 字序 格式1 
    print(zx2)

    bhs1=pathimg[nn][8:-4]     # 笔画数 左侧第8个 到 右侧左数4个
    print(bhs1)

    title.append(xh2)
    title.append(zx2)
    title.append(bhs1)

    bg0=['00','01','02']#标题的单元格写入

    for tt in range(len(bg0)):   # 02
        
        pp0=int(bg0[tt][0:1])    
        qq0=int(bg0[tt][1:2])  
        # print(p) 
        # for i in range(len(bg)):              
        title1=title[tt]
        print(title)
        
        run=table.cell(pp0,qq0).paragraphs[0].add_run(title1)    # 在单元格0,0(第1行第1列)输入第0个图图案
        run.font.name = '楷体'#
        # run.font.size = Pt(46)  #输入字体大小默认30号 换行(一页一份大卡片
        run.font.size = Pt(36)  #输入字体大小默认30号 一行里(可以一页两份)
        run.font.bold= True  #是否加粗
        run.font.color.rgb = RGBColor(230,230,230) #数字小,颜色深0-255
        # paragraph.paragraph_format.line_spacing = Pt(180) #数字段间距
    
        r = run._element
        r.rPr.rFonts.set(qn('w:eastAsia'), '楷体')#将输入语句中的中文部分字体变为华文行楷
        table.cell(pp0,qq0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中 

    # 写入图片上的汉字2*3格子灰色

    # 单元格位置2*2格
    bg=[]
    for x in range(2,4):        # 2行
        for y in range(0,3):    # 2列
            ww='{}{}'.format('%02d'%x,'%02d'%y)
            bg.append(ww)
    print(bg)   

    # ['00', '01', '02', '10', '11', '12', '20', '21', '22', '30', '31', '32']
    for t in range(len(bg)):   # 02
        
        pp=int(bg[t][0:2])    
        qq=int(bg[t][2:4])  
        # print(p) 
        # for i in range(len(bg)):              
        name=pathimg[nn][6]
        print(name)
        

      
            
        # 写入序号和生肖名称
        run=table.cell(pp,qq).paragraphs[0].add_run(name)    # 在单元格0,0(第1行第1列)输入第0个图图案
        run.font.name = '楷体'#
        # run.font.size = Pt(46)  #输入字体大小默认30号 换行(一页一份大卡片
        run.font.size = Pt(size)  #输入字体大小默认30号 一行里(可以一页两份)
        # run.font.bold= True  #是否加粗
        run.font.color.rgb = RGBColor(230,230,230) #数字小,颜色深0-255
        # run.paragraph_format.line_spacing = Pt(100) #数字段间距
    
        r = run._element
        r.rPr.rFonts.set(qn('w:eastAsia'), '楷体')#将输入语句中的中文部分字体变为华文行楷
        table.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中  
     
    doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\下载幼儿姓氏笔画\零时Word\{}.docx'.format('%02d'%nn))   
    
    from docx2pdf import convert

    # docx 文件另存为PDF文件
    inputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/下载幼儿姓氏笔画/零时Word/{}.docx".format('%02d'%nn)  # 要转换的文件:已存在
    outputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/下载幼儿姓氏笔画/零时Word/{}.pdf".format('%02d'%nn)  # 要生成的文件:不存在
    # 先创建 不存在的 文件
    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 os
from PyPDF2 import PdfFileMerger
target_path =  '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))))
file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/下载幼儿姓氏笔画/(打印合集)姓名笔画演示版字帖(姓氏{}-{}整数共{}张).pdf".format(little,big,int(len(path))))
file_merger.close()
# doc.Close()

# print('----------第5步:删除临时文件夹------------')    
import shutil
shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/下载幼儿姓氏笔画/零时Word') #递归删除文件夹,即:删除非空文件夹

终端运行

 

 

 

同样的方法,再次运行,输入第2组数据

同样的方法,再次运行,输入第3组数据

 同样的方法,再次运行,输入第4组数据

 

 (目前姓氏最多3行12-18,我凑了一个18-24的姓氏,凑满了4种类型,还有5

运行四次,输入不同的值,调用不同的模板,得到撑满格的“带笔画步骤图”的描字帖。

 

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

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

相关文章

LeetCode刷题(ACM模式)-03哈希表

参考引用&#xff1a;代码随想录 注&#xff1a;每道 LeetCode 题目都使用 ACM 代码模式&#xff0c;可直接在本地运行&#xff0c;蓝色字体为题目超链接 0. 哈希表理论基础 0.1 哈希表 哈希表&#xff08;Hash table&#xff0c;也称散列表&#xff09;是根据关键码的值而直…

Redis(六)主从模式与哨兵机制

文章目录 一、主从模式配置一主二从集群 二、哨兵机制哨兵模式演示&#xff1a;哨兵如何监控节点「主观下线」与[客观下线]哨兵如何选新主节点由哪个哨兵进行转移如何通知客户端新主节点的信息? 一、主从模式 配置一主二从集群 开启三个linux&#xff0c;并安装redis info …

【k8s】【Prometheus】【待写】

环境 k8s v1.18.0 192.168.79.31 master 192.168.79.32 node-1 192.168.79.33 node-2一、Prometheus 对 kubernetes 的监控 1.1 node-exporter 组件安装和配置 node-exporter 可以采集机器&#xff08;物理机、虚拟机、云主机等&#xff09;的监控指标数据&#xff0c;能够采…

C++11:可变参数模板、lambda表达式和包装器

目录 一. 可变参数模板 1.1 什么是可变模板参数 1.2 参数包具体值的获取 1.3 emplace/emplace_back接口函数 二. lambda表达式 2.1 lambda表达式的概念和定义方法 2.2 捕捉列表说明 2.3 lambda表达式的底层实现原理 三. 包装器 3.1 function包装 3.2 bind绑定 3.2.…

重估老板电器:加速增长飞轮,迸发品类红利

#王一博同款洗碗机&#xff0c;5月28日&#xff0c;这个话题登上微博热搜&#xff0c;并获得不小关注。数据显示&#xff0c;截至5月29日9:00&#xff0c;该话题一天内引发了166.1万人讨论&#xff0c;阅读量破2.7亿。同时&#xff0c;抖音上&#xff0c;官宣王一博为代言人的话…

Java on Azure 开发工具路线图新发布!

大家好&#xff0c;欢迎来到Java on Azure工具产品的4月更新。让我们首先来谈谈我们对未来几个月的Java on Azure开发工具的投资。在这次更新中&#xff0c;我们还将介绍Azure Service Bus支持和Azure Spring Apps入门模板增强功能。要使用这些新功能&#xff0c;请下载并安装用…

ASEMI单向可控硅BT151参数,BT151封装,BT151体积

编辑-Z 单向可控硅BT151参数&#xff1a; 型号&#xff1a;BT151 存储接点温度范围Tstg&#xff1a;-40~150℃ 工作接点温度范围Tj&#xff1a;-40~125℃ 断态重复峰值电压VDRM&#xff1a;650V 重复峰值反向电压VRRM&#xff1a;650V RMS导通电流IT(RMS)&#xff1a;12…

【P42】JMeter 运行时间控制器(Runtime Controller)

文章目录 一、运行时间控制器&#xff08;Runtime Controller&#xff09;参数说明二、测试计划设计 一、运行时间控制器&#xff08;Runtime Controller&#xff09;参数说明 可以通过时间来确定其后代元素运行多长时间&#xff0c;在时间范围内&#xff0c;后代元素会一直运…

uniapp中根据不同状态跳转不同页面

大纲&#xff1a; 今天我们讲 在uniapp中&#xff0c;如何根据不同的状态跳转到不同的页面。 以下代码&#xff0c;是Tabs标签的展示 &#x1f33f; :list"list" 是参数配置&#xff0c;该参数要求为数组&#xff0c;元素为对象&#xff0c;且对象要有name属性&…

mciSendString函数简介(播放音乐以及录音相关操作)

函数功能&#xff1a;播放多媒体音乐&#xff0c;视频等 mciSendString是用来播放多媒体文件的API指令&#xff0c;可以播放MPEG,AVI,WAV,MP3,等等。这个函数有自己的mci指令&#xff0c;可以通过不同的指令实现不同的功能。这里我会详细讲解mciSendString这个函数的常见用法&…

【Web】HTTP代理和反向代理

直接访问 就是从客户端直接访问服务端&#xff0c;相当于我直接去厂家买可乐&#xff0c;没有中间商赚差价 HTTP代理 HTTP代理指在客户端先访问代理服务器&#xff0c;然后由代理服务器去访问服务端&#xff0c;代理服务器收到响应后再转发个客户端&#xff0c;就像我去商店…

【C++】类与对象——六个默认成员函数、构造函数的概念和特征,析构函数的概念和特征

文章目录 1.类的六个默认成员函数2.构造函数2.1构造函数的概念2.2构造函数的特性 3.析构函数3.1析构函数的概念3.2析构函数的特征 1.类的六个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。   空类中真的什么都没有吗&#xff1f; 并不是&#xff0c;任何…

跨域图像识别

跨域图像识别 跨域图像识别&#xff08;Cross-domain Image Recognition&#xff09;是指在不同的数据集之间进行图像分类或识别的任务。由于不同数据集之间的分布差异&#xff0c;跨域图像识别面临着很大的挑战。 以下是几种代表性的跨域图像识别算法&#xff1a; DDC&#…

利用代码实现自动刷网课阅读时长功能 JAVA

目录 前言&#xff1a;理论依据&#xff1a;现实依据&#xff1a;朴素版只能循环阅读不能翻页&#xff1a;升级版 翻页 阅读&#xff1a;如何使用&#xff1a; 前言&#xff1a; 最近不也快结课了&#xff0c;网课该刷的都要刷掉&#xff0c;最近不就把一门思政课刷完了&#…

粉丝经济:互帮互助,众筹,人人帮我我帮人人

目录 用户精准定位&#xff1a; 用户裂变 用户在线“买卖需要注册&#xff1a;为后期思域流量变现 用户容器“APP&#xff0c;小程序”&#xff1a;用户资产化 LBS(一人千面&#xff0c;个性化定制&#xff0c;根据地理位置进行提醒&#xff1a;优惠券”) 粉丝渠道化&…

信息安全实践1.1(网络嗅探)

前言 这个网络嗅探其实就是用wireshark抓包。那时候赶着做&#xff0c;就随便写了点。参考价值比较少。 第一次实践是因为寒假在家摆烂&#xff0c;然后开学前两天做的&#xff0c;所以质量不是很好。不过也算是一次实践&#xff0c;看看就好。 要求 使用网络嗅探工具抓获网络…

TiDB x Bolt丨超强可扩展性与弹性助力超 1 亿用户畅享出行服务

作者&#xff1a;PingCAP 封小明 通过 TiDB 连接全球极限场景和创新场景&#xff0c;是 PingCAP 长期坚持的国际化战略。目前&#xff0c;在全球已有超过 3000 家企业选择 TiDB。无论在游戏、金融、物流、互联网还是智能制造等行业&#xff0c;基于规模化 OLTP 扩容、实时 HTA…

为什么说企业需要搭建产品手册?

企业需要搭建产品手册的原因有很多&#xff0c;其中包括提高产品使用体验、降低售后服务成本、促进产品销售等。本文将从这些方面来介绍企业为什么需要搭建产品手册&#xff0c;并探讨如何有效地搭建和管理产品手册。 一、提高产品使用体验 产品手册是一份指导用户如何正确使…

【数据结构】二叉树——链式结构的实现(代码演示)

目录 1 二叉树的链式结构 2 二叉树的创建 3 二叉树的遍历 3.1 前序遍历 3.1.1运行结果&#xff1a; 3.1.2代码演示图: 3.1.3 演示分析&#xff1a; 3.2 中序遍历 3.3 后序遍历 3.4 层序遍历 4 判断是否是完全二叉树 5 二叉树节点的个数 5.1 总个数 5.2 叶子节点…

Electron-Builder Windows系统代码签名

前言 项目打包签名是两年前做的了&#xff0c;使用Electron-Bulder&#xff0c;打包工具版本迭代较少&#xff0c;倒是electron版本更新飞快&#xff0c;目前官方推荐使用Electron Forge进行打包&#xff0c;后续再对两者进行对比&#xff0c;重新整理现在的实现方案。 签名简…