首页 > 其他分享 >【教学类-13-06】20240119数字色块图的代码优化-简化代码路径+班级位置空缺

【教学类-13-06】20240119数字色块图的代码优化-简化代码路径+班级位置空缺

时间:2025-01-21 22:28:20浏览次数:3  
标签:02 03 13 01 06 04 代码优化 import

背景需求:

第一笔有客户购买“9图的数字像素图”,我都没有在百度网盘里备份。

   ​​​​​​​

打开代码文件夹,发现生成的PDF很多,不知道是哪一个?

找到是这份,可是里面有大1班了,客户不一定是大1班。所以word模版的班级要空着,就需要修改模版

删除中3的文字,按四个空格(2个汉字距离)此时9个格子变动了

关闭页眉,9个格子正好凑满一页

打开代码一看

【教学类-13-01】20221112《数字色块图5*7*9-A4竖版》(中大班主题《》)_数组织涂色方格-CSDN博客文章浏览阅读705次。【教学类-13-01】20221112《数字色块图5*7*9-A4竖版》(中大班主题《》)_数组织涂色方格https://blog.csdn.net/reasonsummer/article/details/1278217281.发现这个代码的路径非常长(以前不懂得用变量,都是写全部的路径)

2.文件名用的Format(写的很长),现在我都用f和{n}写名称(缩短字符)

基于以上诸多问题,需要重新生成一份

优化代码(默认30份)

'''
数字像素图(A4竖板5*7 9个表)
作者:星火讯飞、阿夏
20250115修改
'''

import os,random

num=30
# int(input('生成多少份\n'))
Number=9
# int(input('抽取几个数字(10个中取9个=9个)\n'))
size=25
# float(input('数字大小(最大28,建议25)\n'))
weight=5
# int(input('表格宽度(5格)\n'))
height=7
# int(input('表格长度高度(7格)\n'))

print('----------第1步:提取所有图案------------')

import random
# m数字位置上的数字


print('----------第2步:新建一个临时文件夹------------')
# 新建一个”装N份word和PDF“的文件夹
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\像素图'

ten_path=path+r'\零时Word'
os.makedirs(ten_path,exist_ok=True)



print('----------第3步:随机抽取8个不重复的图案 ------------')
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

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

for z in range(0,num):   #多少份  

    m=str(random.randint(0,4)) # 涂色部分数字和非涂色部分数字不能一样 0,1,2,3,4  共5个(小)
    n=str(random.randint(5,9)) # 涂色部分数字和非涂色部分数字不能一样 5,6,7,8,9  工5个(大)
    

    N=[]
    def same():
        for r in range(0,len(nn)):
            nn1=int(nn[r][0])
            nn2=int(nn[r][1])
            for nnn in range(nn1,nn2):
                N.append(n) 

            mm1=int(mm[r][0])
            mm2=int(mm[r][1])
            for mmm in range(mm1,mm2):
                N.append(m)
    # print(N)

    # 数字1 的坐标位置列表值
    nn=['06','04','04','04','03','06']
    mm=['02','01','01','01','03','00']
    same()

    # 数字2 的坐标位置列表值
    nn=['06','04','02','02','04','06']
    mm=['03','01','03','01','03','00']
    same()

    # 数字3 的坐标位置列表值
    nn=['06','04','02','04','02','06']
    mm=['03','01','03','01','03','00']
    same()

    # 数字4 的坐标位置列表值
    nn=['06','01','02','01','02','01','02','03','06']
    mm=['01','01','01','01','01','01','04','01','00']
    same()

    # 数字5 的坐标位置列表值
    nn=['06','02','04','04','02','06']
    mm=['03','01','03','01','03','00']
    same()

    # 数字6 的坐标位置列表值
    nn=['06','02','04','02','01','02','06']
    mm=['03','01','03','01','01','03','00']
    same()

    # 数字7 的坐标位置列表值
    nn=['06','04','04','04','04','06']
    mm=['03','01','01','01','01','00']
    same()

    # 数字8 的坐标位置列表值
    nn=['06','02','01','02','02','01','02','06']
    mm=['03','01','01','03','01','01','03','00']
    same()

    # 数字9 的坐标位置列表值
    nn=['06','02','01','02','04','02','06']
    mm=['03','01','01','03','01','03','00']
    same()

    # 数字0 的坐标位置列表值
    nn=['06','02','01','02','01','02','01','02','06']
    mm=['03','01','01','01','01','01','01','03','00']
    same()

    Nall=[] # [[],[],[]]的样式

    for aaa in range(0,int(len(N)/int(weight*height))):    # 把35*10个数字,分割成35一组,35一组,一共10组(0-9)
        aaaa=(N[aaa*int(weight*height):aaa*int(weight*height)+int(weight*height)])
        Nall.append(aaaa)        # 10组的35个数字
    print(Nall)
    nine=random.sample(Nall,Number)      # 从10个中间随机抽9组(排序打乱,数字会少一个)
    print(nine)

    doc = Document(path+r'\数字像素图竖版9个.docx') 

    for numbg in range(0,len(nine)): # [[],[],[]]的样式的索引数字
    #     print(num1)
        NUMnum=nine[numbg]
        print(NUMnum)   
        # ['6', '6', '6', '6', '6', '6', '2', '2', '2', '6', '6', '6', '6', '2', '6', '6', '2', '2', '2', '6', '6', '2', '6', '6', '6', '6', '2', '2', '2', '6', '6', '6', '6', '6', '6']
# ['00', '01', '02', '03', '04', '10', '11', '12', '13', '14', '20', '21', '22', '23', '24', '30', '31', '32', '33', '34', '40', '41', '42', '43', '44', '50', '51', '52', '53', '54', '60', '61', '62', '63', '64']   

    #  确定8*4表格的表格单元格坐标(如第1行第1格是0,0 ,第2行第3格是(1,2)   
        bg=[]
        for x in range(0,height):
            for y in range(0,weight):
                ww='{}{}'.format(x,y)
                bg.append(ww)
        print(bg)      
    
    # ['00', '01', '02', '03', '04', '05', '06', '07', '10', '11', '12', '13', '14', '15', '16', '17', '20', '21', '22', '23', '24', '25', '26', '27', '30', '31', '32', '33', '34', '35', '36', '37']
    # 提取表格单元格坐标和图形的坐标
    
        table = doc.tables[numbg]          # 一共有9个表格        

        for t in range(0,len(NUMnum)):             # 图案的长度为8*4=32个    遍历0-32(32个)
            pp=int(bg[t][0])     # 提取表格bg里面每个元素的第0个数字==单元格X坐标  t=索引数字
            qq=int(bg[t][1])
            k=NUMnum[t]                  # 提取list图案列表里面每个图形  t=索引数字
            print(pp,qq,k)

            run=table.cell(pp,qq).paragraphs[0].add_run(k)    # 在单元格0,0(第1行第1列)输入第0个图图案
            run.font.name = '黑体'#输入时默认华文琥珀字体
            run.font.size = Pt(size)  #输入字体大小默认30号
            run.font.color.rgb = RGBColor(200,200,200) #设置颜色浅灰
            
            r = run._element
            r.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷
            table.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中     

    doc.save(ten_path+fr'\{z:02}.docx')#保存为XX学号的电话号码word     

    from docx2pdf import convert
    # docx 文件另存为PDF文件
    inputFile = ten_path+fr'\{z:02}.docx'
    outputFile = ten_path+fr'\{z:02}.pdf'
    # 先创建 不存在的 文件
    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 =  ten_path
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(path+fr'\20250115 像素图数字竖版{weight}乘{height}竖向{Number}图({num}份).pdf')
# doc.Close()

# # print('----------第5步:删除临时文件夹------------')    
import shutil
shutil.rmtree(ten_path) #递归删除文件夹,即:删除非空文件夹

我感觉这里的1,上面有勾,下面有横线,不好看,还是改成了竖条。

代码展示:

234324

后续:

1.所有的代码都修改简化(横4 纵4,9图)

2、这个代码的班级是做在页眉里面的,需要在Word页眉里修改好班级,只要页眉动了,9个数字格子都会动。

最好还是把信息标题放在正文里,用代码通过段落写入方式输入班级。

标签:02,03,13,01,06,04,代码优化,import
From: https://blog.csdn.net/reasonsummer/article/details/145247245

相关文章

  • 随身 WiFi 的 R106 卡槽焊接与开孔:网络连接的新起点
    随身WiFi相关(程序+源码+工具+调试部署+开发环境)总共500多GB以上,文章末尾可获取,在最后面了。随身WiFi的R106已焊接卡槽并开好卡槽孔,说明该设备已经具备了使用特定SIM卡进行网络连接的基础条件。以下是关于此情况的一些分析和建议:优势方面使用便利性提升:开好卡槽孔后......
  • 题解:洛谷 P1351 [NOIP2014 提高组] 联合权值
    题目https://www.luogu.com.cn/problem/P1351我们可以发现,若点对  的距离为 ,则它们一定会经过一个中转点,因此我们考虑枚举中转点 ,然后枚举与  有直接边连接的两个点,按照题意统计答案即可。#include<bits/stdc++.h>usingnamespacestd;#pragmaG++optimisze(3,"Ofas......
  • 【虚拟机】VMware Tools 13.0.0 发布 : 虚拟机必备组件 (驱动和交互式服务)
    VMware客户机操作系统无缝交互必备组件请访问原文链接:https://sysin.org/blog/vmware-tools-13/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVMwareTools是一套安装在虚拟机的操作系统中的实用程序。VMwareTools可提高虚拟机的性能,并在VMware产品中实现主机......
  • 基于Java的学生选课系统设计与实现 毕业设计源码13931
    摘要在当今快节奏的高等教育环境中,学生选课系统的重要性愈发凸显。曾经,学生在选课时需要排长队、填表格,繁琐而低效。为解决这一难题,本研究设计并实现了一套智能化学生选课系统。这一系统不仅为学生提供了便捷的选课服务,也为教务管理带来了新的机遇。通过系统的开发,我旨在提......
  • mysql 获取当前时间戳13
    mysql获取当前时间戳13在MySQL中,您可以使用CURRENT_TIMESTAMP或NOW()函数来获取当前的时间戳。这将以'YYYY-MM-DDHH:MM:SS'格式返回当前的日期和时间。如果您需要的是一个UNIX时间戳(即自1970年1月1日以来的秒数),您可以使用UNIX_TIMESTAMP()函数。以下是获取当前UN......
  • Excel 技巧13 - 如何使用计算带单位的数据(★★★),神奇的Ctrl+E 都能干什么?(合并数据,拆
    本文讲了如何在Excel中计算带单位的数据。然后还讲了神奇的快捷键Ctrl+E的功能。目录1,如何统计带单位的数据1-1,先用一个替代1-2,Ctrl+E按相同规则提取所有数据1-3,替换掉多余的替代-S2,Ctrl+E快捷键都能干什么?2-1,合并数据2-2,拆分数据2-3,提取数据2-4,数据格式化2-5......
  • ISO镜像软件 ISO Workshop Professional v13 中文注册版
    在数字时代,管理光盘和创建ISO映像是一项必备技能。ISOWorkshopPro正是为此而生,这款强大的PC端ISO镜像工具,能够助你轻松完成从备份、刻录到转换的全方位光盘任务。无论是CD、DVD还是蓝光光盘,ISOWorkshopPro都能一一搞定。该版本已注册,可以使用全部功能。使用说明:1、将压......
  • P1006 [NOIP2008 提高组] 传纸条
    链接https://www.luogu.com.cn/problem/P1006题目思路和方格取数差不多,额外的步骤就是去重:只取当前节点(i,j)的右上或者左下部分。并且最后的答案是dp[m][n-1][m-1][n],只dp到终点的上面和左边一个点代码#define_CRT_SECURE_NO_WARNINGS#include<iostream>#include<a......
  • Java从零到1的开始-Day13
    一、String1.String介绍1.概述:String类代表字符串2.特点: a.Java程序中的所有字符串字面值(如"abc")都作为此类的实例(对象)实现  凡是带双引号的都是String的对象  Strings="abc"   String是数据类型,是一个字符串类型   s:对象名  ......
  • Histone H3 (116-136), C116-136
    【简介】HistoneH3(116-136),C116-136是组蛋白H3的一个片段肽。【基本信息】英文名称:HistoneH3(116-136),C116-136分子量:约为2508.04分子式:C₁₀₇H₁₉₅N₃₉O₂₈SCAS号:917103-17-4单字母序列:KRVTIMPKDILARIRRGERA三字母序列:H-Lys-Arg-Val-Thr-Ile-Met-Pro-L......