作品展示:
![](https://img-blog.csdnimg.cn/27151b6ce1c941c69cadf7f02b626774.png)
背景需求:
最近在做小课题结题资料,看到之前做过的几个学具项目,其中的空心图案拼贴画很不错(中班上学期做过)想到中6班的孩子还没有玩过,就想再打印一套学具(中班下学期做)。再次做就把代码优化一下(段落写入文字图形 改成 单元格写入文字图形)
材料准备:
![](https://img-blog.csdnimg.cn/15cb3ff4fe7844129250400d0ae4e2e3.png)
WORD表格
![](https://img-blog.csdnimg.cn/d8277bb175b14fb5bdb5c556ac77929e.png)
代码展示
'''
作者:阿夏
时间:2023年10月25日
名称:中班学具:8个随机空心图案拼贴-不重复图案)单元格,6个图形拼贴
'''
# print('----------第1步:制作docx里面的数字 把100个数字分成10*10矩阵导入xls S形迷宫 1、3、5、7是升序排列,2,4,6,8是降序排列------------')
import xlwt
import os
from docx import Document
list=['○','◇','□','△','▽','☆','☼','☺','☾','◎']# 搜狗拼音符号里面的空心的常用图形10个
num=int(input('生成多少份(28份)\n'))
Number=int(input('每页制作多少个(6个)\n'))
print('----------第2步:新建一个临时文件夹------------')
# 新建一个”装N份word和PDF“的文件夹
os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\随机几何形模板\零时Word')
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
figure=[]
figurea=[]
for nn in range(0,int(num/2)): #28/2 0-14
figure.clear()
doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\随机几何形模板\随机几何形模板(单元格).docx')# 打开带docx模板(这个模板有页脚的页码,阿夏认为页码是必须的)
# 随机抽取8个不重复空心图案(#CSDN博主「孟意昶」 原文链接:https://blog.csdn.net/weixin_44999258/article/details/125163277)
for aa in range(2):
shuffle = random.sample(list, Number) # 随机抽取8个不重复空心图案
figure.append(shuffle)
print(figure) # ['◇','□','△','▽','☆','☼','☺','☾','◎']
for z in range(2): # 5行组合循环2次 每页两张表
table = doc.tables[z]
# 单元格位置3*3格
bg=[]
# 前1+3+1行不要写入 从4动
for x in range(0,3): # 3行 索引1行2行3行
for y in range(0,2): # 3列 索引0列1列2列
ww='{}{}'.format(x,y)
bg.append(ww)
print(bg)
for t in range(len(bg)): # 12
pp=int(bg[t][0:1])
qq=int(bg[t][1:2])
# print(p) 22
k=figure[z][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(46) #输入字体大小默认30号 换行(一页一份大卡片
run.font.size = Pt(129) #输入字体大小默认30号 一行里(可以一页两份)
# run.font.bold= False #是否加粗
run.font.bold= True #是否加粗
run.font.color.rgb = RGBColor(170,170,170) #数字小,颜色深0-255
# paragraph.paragraph_format.line_spacing = Pt(180) #数字段间距
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乘2)({}人共{}份).pdf".format(num,int(num/2)))
file_merger.close()
# doc.Close()
# print('----------第5步:删除临时文件夹------------')
import shutil
shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/随机几何形模板/零时Word') #递归删除文件夹,即:删除非空文件夹
终端运行:
![](https://img-blog.csdnimg.cn/a7dff9c67fa249aab31970b230d2a7b2.png)
结果展示:
![](https://img-blog.csdnimg.cn/a8981ce726f24c59b66cc6fa1088d5f6.png)
|