
背景需求:
前文提到6宫格数独的图片6*6=36图,如果将6张任务卡放在一个A4上,看上去6种动物很小,所以我换了一个word模板,变成了2张任务卡放在一个A4上。
【教学类-52-07】20240903动物数独(6宫格)一页2张任务卡,无答案-CSDN博客文章浏览阅读846次,点赞25次,收藏6次。【教学类-52-07】20240903动物数独(6宫格)一页2张任务卡,无答案
https://blog.csdn.net/reasonsummer/article/details/141903770
但是我没有放大贴图卡片,还是每张10*10CM。

我想,如果将动物数独用于公开课,就需要比较大的学具,也就是1关任务卡贴1张A4,大约是21*21CM一张,而动物贴图卡片也需要1张A4,大约是21*21CM一张。
也就是自制KT 版的大小是 6宫格图(20*6=120*120CM)

我们幼儿园用的KT版是1.2*2.4M,,正好切出一个6宫格图案,可以用来撑满个别化的墙面。

话不多说,直接进上代码
# 测试11*11格,2*2一共4套3*3 宫格
'''
动物6宫格 任务卡一页一张(36张),答案卡一页一张(36张),贴图一页一张(36张)
108张很浪费彩墨,但是如果是公开课,还是值得的。
生成时间90分钟
动物数独 6宫格,
1、大卡片9.84CM一行,A4一页4张
2、参考图(空1格到空34格子,生成PDF,转为png
3、将png关卡图片做成8.82*9.7的小图卡(A4一页4张)
4、图片卡和关卡图合并在一个PDF
5、有答案
关卡图1张一页,最大化19.6
时间:2024年4月12日
作者:「Vaeeeeeee」,AI对话大师,阿夏
时间:2024年4月12日 13:35
'''
print('-----0、生成大图片卡-------')
# -*- coding:utf-8 -*-
'''
制作动物/脸谱数独的黏贴关卡 A4一页4张图片 9.85CM
作者:AI对话大师,阿夏
时间:2024年6月3日
# '''
# print('----1、读取行列-------')
import os,time
from docx import Document
from docx.shared import Cm
from docx2pdf import convert
from PyPDF2 import PdfMerger
import shutil
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\动物数独6宫格'
# # 新建一个”装N份word和PDF“的临时文件夹
imagePath=path+r'\\零时Word'
os.makedirs(imagePath,exist_ok=True) # 若图片文件夹不存在就创建
imagePath4=path+r'\\汇总'
os.makedirs(imagePath4,exist_ok=True)
doc = Document(path +r'\动物数独(6宫格横板)1图关卡.docx')
# 获取文档中的所有表格
tables = doc.tables
# 选择你需要读取的表格(在这种情况下是第1张表格)
target_table = tables[0]
# 获取所选表格的行数和列数
num_rows = len(target_table.rows)
num_columns = len(target_table.columns)
print("行数:", num_rows)
# 3
print("列数:", num_columns)
# # 2
print('----2、读取图片-------')
import os
# 指定文件夹路径
folder_path = path + r'\02动物图片'
# 读取文件夹中所有文件的名称并加上路径
pic_list = [os.path.join(root, file) for root, dirs, files in os.walk(folder_path) for file in files]*6
# 打印文件名称和路径
print(pic_list)
print(len(pic_list))
# print('----3、插入六套大图片-------')
for f in range(len(pic_list)):
# 打开.docx文件
doc = Document(path + r'\动物数独(6宫格横板)1图关卡.docx')
# 获取文档中的所有表格
table = doc.tables[0]
# 遍历表格的所有行和单元格
i = 0
for row in table.rows:
for cell in row.cells:
# 在单元格中插入图片
cell_paragraph = cell.paragraphs[0]
run = cell_paragraph.add_run()
run.add_picture(pic_list[f], width=Cm(19.6), height=Cm(19.6))
cell_paragraph.alignment = 1 # 设置单元格中的文本居中
i += 1 # 移动到下一个图片路径
# 保存修改后的.docx文件
doc.save(imagePath + fr'\{f:02d}页.docx')
# docx 文件另存为PDF文件
inputFile = imagePath + fr'\{f:02d}页.docx' # 要转换的文件:已存在
outputFile = imagePath + fr'\{f:02d}页.pdf' # 要生成的文件:不存在
convert(inputFile, outputFile)
time.sleep(5)
# 合并PDF文件
pdf_lst = [f for f in os.listdir(imagePath) if f.endswith('.pdf')]
pdf_lst = [os.path.join(imagePath, filename) for filename in pdf_lst]
pdf_lst.sort()
file_merger = PdfMerger()
for pdf in pdf_lst:
file_merger.append(pdf)
file_merger.write(imagePath4 + r"\02操作卡.pdf")
file_merger.close()
# 第5步
shutil.rmtree(imagePath) #递归删除文件夹,即:删除非空文件夹
print('----3、制作空白题卡-------')
import random
from win32com.client import constants, gencache
from win32com.client.gencache import EnsureDispatch
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH
import docxtpl
import pandas as pd
from docx2pdf import convert
from docx.oxml.ns import nsdecls
from docx.oxml import parse_xml
import copy
num=1
# int(input('生成几份\n'))
# 制作"单元格"# 几宫格
hsall=6
# int(input('请输入4或9\n'))
hs=hsall
# kk=int(input('空格数量,输入5,就是50%,就是空一半)\n'))
print('------1、如果正好想生成1空、2空、3空、4空的数字&