【教学类-34( 二 )

< 500000:lrRight = Falseif drandNum < 500000:drRight = Falsenew_img_imb = new_img.load()if j != col - 1:if lrRight :new_next_img = imbList[i][j + 1]new_next_img_imb = new_next_img.load()# 左右for k in range((j + 1) * splitW, (j + 1) * splitW + r_d + r_offset):for z in range(i * splitL, (i + 1) * splitL):r_w = pointList[i][j]['colPoint'][0] + r_offsetr_l = pointList[i][j]['colPoint'][1] r = ((pow(abs(k - r_w),2) + pow(abs(z - r_l),2))) ** yangshi# 凹凸圆球的直径 , 作者原设置0.5 , 感觉三个凹型的拼图连接地方太细了 , 幼儿容易剪断 , 所以这里改成0.55#测试结果:0.3不规则矩形块(图形类似俄罗斯方块)# 0.7 方块 , 四周 有很小的圆点(不连接) 内部有很小空心圆点(适合电子版)# 0.6 方块 , 四周 有很大的圆点(不连接) 内部有很小空心圆点(适合电子版)if r < r_d:new_img_imb[k - j * splitW + r_d + r_offset, z - i * splitL + r_d + r_offset] = pimg[k, z]new_next_img_imb[k - (j + 1) * splitW + r_d + r_offset, z - i * splitL + r_d + r_offset] = (255,255,255,0)imbList[i][j + 1] = new_next_imgelse:new_next_img = imbList[i][j + 1]new_next_img_imb = new_next_img.load()# 左右for k in range((j + 1) * splitW - r_d - r_offset, (j + 1) * splitW):for z in range(i * splitL, (i + 1) * splitL):r_w = pointList[i][j]['colPoint'][0] - r_offsetr_l = pointList[i][j]['colPoint'][1]r = ((pow(abs(k - r_w),2) + pow(abs(z - r_l),2))) ** yangshiif r < r_d:new_next_img_imb[k - (j + 1) * splitW + r_d + r_offset, z - i * splitL + r_d + r_offset] = pimg[k, z]new_img_imb[k - j * splitW+ r_d + r_offset, z - i * splitL + r_d + r_offset] = (255,255,255,0)imbList[i][j + 1] = new_next_imgif i!= row - 1:if drRight:new_down_img = imbList[i + 1][j]new_down_img_imb = new_down_img.load()# 上下for k in range(j * splitW, (j + 1) * splitW):for z in range((i + 1) * splitL, (i + 1) * splitL + r_d + r_offset):r_w = pointList[i][j]['rowPoint'][0]r_l = pointList[i][j]['rowPoint'][1] + r_offsetr = ((pow(abs(k - r_w),2) + pow(abs(z - r_l),2))) ** yangshiif r < r_d:new_img_imb[k - j * splitW + r_d + r_offset, z - i * splitL + r_d + r_offset] = pimg[k, z]new_down_img_imb[k - j * splitW + r_d + r_offset, z - (i + 1) * splitL + r_d + r_offset] = (255,255,255,0)imbList[i + 1][j] = new_down_imgelse:new_down_img = imbList[i + 1][j]new_down_img_imb = new_down_img.load()# 上下for k in range(j * splitW, (j + 1) * splitW):for z in range((i + 1) * splitL - r_d - r_offset, (i + 1) * splitL):r_w = pointList[i][j]['rowPoint'][0]r_l = pointList[i][j]['rowPoint'][1] - r_offsetr = ((pow(abs(k - r_w),2) + pow(abs(z - r_l),2))) ** yangshiif r < r_d:new_down_img_imb[k - j * splitW + r_d + r_offset, z - (i + 1) * splitL + r_d + r_offset] = pimg[k, z]new_img_imb[k - j * splitW + r_d + r_offset, z - i * splitL + r_d + r_offset] = (255,255,255,0)imbList[i + 1][j] = new_down_imgimbList[i][j] = new_img# n=[]# foriin range (0,row*col):#n.append(i)# print(n)print('----把每张图片的12份小图放入一个文件夹小图(每张大图生成一个文件夹)----')for i in range(0,row):# 3for j in range(0,col):# 4n=3*4dirPath = r"C:/Users/jg2yXRZ/OneDrive/桌面/凸起图案拼图" + "/小图{}/{}.png".format(w+1,'d'%(i*4 + j) )# 在路径下的“拼图”文件夹下#imbList[i][j].save(dirPath)if __name__ == '__main__':# dirPath =r"C:/Users/jg2yXRZ/OneDrive/桌面/凸起图案拼图/小图/"SplitCircle(SplitImages(pathz[w], 3,4), pathz[w])# SplitCircle(SplitImages(pathz[w], pic_puzzle_longnum, pic_puzzle_shortnum) , pathz[w])# 横版高4长6# 第一个数字是高度4张图片第二个数字是宽度3张# '''# 71.8KB的图片4*6 24张3*8摆放在word 上下左右 1 1 1 1print('-----第4步:拼图块导入docx打印-----')print('----------4-1:新建一个临时文件夹------------')# 新建一个”装N份word和PDF“的文件夹os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\凸起图案拼图\零时Word')print('---提取小图片路径------------')path=[]for r in range(len(pathz)):pr="C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\凸起图案拼图\\小图{}".format(r+1)# 过滤:只保留png结尾的图片imgs1=os.listdir(pr)for img1 in imgs1:if img1.endswith(".png"):path.append(pr+'\\'+img1)# 所有图片的路径print(path)print(len(path))# 216条路径(18张*12图)# print(imgs1)print('----------第3步:随机抽取9张图片 ------------')import docxfrom docx import Documentfrom docx.shared import Pt from docx.shared import RGBColorfrom docx.enum.text import WD_PARAGRAPH_ALIGNMENTfrom docx.oxml.ns import qnimport randomimport os,timeimport docxfrom docx import Documentfrom docx.shared import Inches,Cm,Ptfrom docx.shared import RGBColorfrom docx.enum.text import WD_PARAGRAPH_ALIGNMENTfrom docx.oxml.ns import qnfrom docxtpl import DocxTemplateimport pandas as pdfrom docx2pdf import convertfrom docx.shared import RGBColorfor nn in range(0,len(pathz)):#28/2 0-14doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\凸起图案拼图\长方形模板.docx')## 制作列表# 从左边图列表和右边图列表中抽取图片(12张图片 , 可能5个向左、7个向右边)# 24条里面0和12条是一组 , 2个里面随机抽1一个 , 1和13是一组 , 2个里面随机抽一个…… 抽出12个图片后r=[]c=[]r.append(path[nn*12:nn*12+12])# 左侧第一份,# r.append(path[nn*24:nn*24+24])# 连续12张图片、2份字母插入同一份A4# print(r)# 再打乱顺序读取12个for a in r:for b in a:c.append(b)print(c)figures=random.sample(c[0:12],Number)# 前9张不重复打乱# figures2=random.sample(c[4:8],Number)# 后9张不重复打乱# figures3=random.sample(c[12:18],Number)# 后6张不重复打乱# figures4=random.sample(c[18:24],Number)# 后6张不重复打乱# 9+9张不重复打乱图片合并# figures=figures1+figures2# figures=figures1+figures2+figures3+figures4print(figures)# # 每2个学号一组的列表 m名字里面的前两个数字(学号)# name2=name[nn*2:nn*2+2]#print(name2)# for z in range(2):# 5行组合循环2次 每页两张表# 单元格位置3*3格bg=[]# 前1+3+1行不要写入 从4动for x in range(0,3):# 3行 索引1行2行3行for y in range(0,4):# 3列 索引0列1列2列ww='{}{}'.format(x,y)bg.append(ww)print(bg) table = doc.tables[0]for t in range(len(bg)):# 02pp=int(bg[t][0:1])qq=int(bg[t][1:2])# print(p)k=figures[t]print(pp,qq,k)# 写入图片run=doc.tables[0].cell(pp,qq).paragraphs[0].add_run()# 在第1个表格中第2个单元格内插入国旗run.add_picture('{}'.format(k),width=Cm(6.05),height=Cm(6.05))# 单元格宽度6.156.15table.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.LEFT #居中 ## 姓氏描画文字#title=[]#for t in range(4):#title.append(name2[z][0])#print(title)#wz=[]## 前1+3+1行不要写入 从4动#for x1 in range(0,3):# 3行 索引1行2行3行#for y1 in range(0,4):# 3列 索引0列1列2列#ww='{}{}'.format(x1,y1)#wz.append(ww)#print(wz)doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\凸起图案拼图\零时Word\{}.docx'.format('d'%nn))from docx2pdf import convert# docx 文件另存为PDF文件inputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/凸起图案拼图/零时Word/{}.docx".format('d'%nn)# 要转换的文件:已存在outputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/凸起图案拼图/零时Word/{}.pdf".format('d'%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 osfrom PyPDF2 import PdfFileMergertarget_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/桌面/凸起图案拼图/(打印合集)凸起图案拼图A4一页一份(3乘4).pdf")file_merger.close()# doc.Close()# # # print('----------第5步:删除临时文件夹------------')import shutilshutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/凸起图案拼图/零时Word') #递归删除文件夹 , 即:删除非空文件夹for i in range(len(pathz)):shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/凸起图案拼图/小图{}'.format(i+1)) #递归删除文件夹 , 即:删除非空文件夹