【教学类-52-11】20240919动物数独(4宫格)1图、2图、6图、有答案、无答案 组合版18套

一、背景需求

昨天修改了四宫格数独的代码,把任务卡从一页6张改成一页2张

【教学类-52-10】20240919动物数独(4宫格)一页2张任务卡,有答案,最大图卡(最适合的商品)-CSDN博客文章浏览阅读553次,点赞12次,收藏6次。【教学类-52-10】20240919动物数独(4宫格)一页2张任务卡,有答案,最大图卡(最适合的商品)https://blog.csdn.net/reasonsummer/article/details/142387324

同时在小红书里更改了商品图片

然后我想到一个问题:万一有客户对任务卡的大小(1页1图、1页2图、1页6图)或操作卡(1页1图、1页2图,1页6图)有不同的组合需求,那么我还要重新跑代码生成组合样式。

可是随机数独部分的代码生成时间实在太长了40分钟,跑一次太耗时。我想能不能直接做一套代码,自动生成所有可能生产的组合样式?

二、解题思路:

目前根据A4纸大小,共设计了三种图示大小

也就是说,在A4纸基础上,数独任务卡、动物操作卡、答案卡有三种样式:

1图19.6*19.6CM 

2图14.1*14.1CM 

6图9.39*9.39CM 

各种大小的卡片的组合方式如下:

1、无答案组合(9种)

动物操作卡1图+任务卡1图

动物操作卡1图+任务卡2图

动物操作卡1图+任务卡6图

动物操作卡2图+任务卡1图

动物操作卡2图+任务卡2图

动物操作卡2图+任务卡6图

动物操作卡6图+任务卡1图

动物操作卡6图+任务卡2图

动物操作卡6图+任务卡6图

 2、有答案组合27种(只要其中9种,任务卡和答案卡一样大,便于正反黏贴)

动物操作卡1图+任务卡1图+答案卡1图

动物操作卡1图+任务卡2图+答案卡2图

动物操作卡1图+任务卡6图+答案卡6图

动物操作卡2图+任务卡1图+答案卡1图

动物操作卡2图+任务卡2图+答案卡2图

动物操作卡2图+任务卡6图+答案卡6图

动物操作卡6图+任务卡1图+答案卡1图

动物操作卡6图+任务卡2图+答案卡2图

动物操作卡6图+任务卡6图+答案卡6图

三、设计结果

2024年9月22日,经过一整天的代码调式,终于把整个环节打通了。


# -*- coding:utf-8 -*-

'''
制作动物/脸谱数独4宫格的黏贴关卡 A4 1图2图6图的所有组合 
1.无答案:9种3:3,两两组合
2.有答案:27种 3:3:3,三三组合(实际需要其中9种)
作者:AI对话大师,阿夏
时间:2024年9月19日
'''


print('-----第一板块、动物操作卡(大图片卡一页1图、1页2图 一页6图)-------')

    


# print('----1、读取行列-------')
import os,time
from docx import Document
from docx.shared import Cm
from docx2pdf import convert
from PyPDF2 import PdfMerger
import shutil



num=1
# int(input('生成几份\n'))
# 制作"单元格"# 几宫格
hsall=4
# int(input('请输入4或9\n'))
hs=hsall

path=fr'C:\Users\jg2yXRZ\OneDrive\桌面\动物数独{hs}宫格'


psize=[19.6,14.1,9.39]
pg=[1,2,6]
gzs=[1,2,2]

for pt in range(len(pg)):
    # # 新建一个”装N份word和PDF“的临时文件夹
    imagePath=path+r'\\零时Word'
    os.makedirs(imagePath,exist_ok=True)  # 若图片文件夹不存在就创建
    
    imagePathpaste=path+r'\\05操作卡pdf'
    os.makedirs(imagePathpaste,exist_ok=True) 

    doc = Document(path +fr'\动物数独({hs}宫格横板){pg[pt]}图关卡.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(folder_path, file_name) for file_name in os.listdir(folder_path)]*hs
    # print(pic_list)
    # print(len(pic_list))
    
    groups = [pic_list[i:i + int(pg[pt])] for i in range(0, len(pic_list), int(pg[pt]))]
    print(groups)
    print(len(groups))

    # # # print('----3、黏贴图片卡,一页1图、1页2图 一页6图-------')

   
        # 处理每一组图片
    for group_index, group in enumerate(groups):
        # 创建新的Word文档
        doc = Document(path + fr'\动物数独({hs}宫格横板){pg[pt]}图关卡.docx')
        # print(group)
        
        # 遍历每个单元格,并插入图片
        for cell_index, image_file in enumerate(group):
            # 计算图片长宽(单位:厘米)
            cc=float(psize[pt])
            # 插入图片到单元格
            table = doc.tables[0]
            cell = table.cell(int(cell_index / int(gzs[pt])), cell_index % int(gzs[pt]))
    #         # 如果第一行有4个格子,两个数字都写4
            cell_paragraph = cell.paragraphs[0]
            cell_paragraph.clear()
            run = cell_paragraph.add_run()
            
            run.add_picture(os.path.join(image_file), width=Cm(cc), height=Cm(cc))
            cell_paragraph.alignment = 1  # 设置单元格中的文本居中
      


        # 保存修改后的.docx文件
        doc.save(imagePath + fr'\{group_index + 1:02d}页.docx')
        # docx 文件另存为PDF文件
        inputFile = imagePath + fr'\{group_index + 1:02d}页.docx'  # 要转换的文件:已存在
        outputFile = imagePath + fr'\{group_index + 1:02d}页.pdf'  # 要生成的文件:不存在
        convert(inputFile, outputFile)
        time.sleep(8)

    # 合并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(imagePathpaste + fr"\03 {pg[pt]:02}图操作卡.pdf")
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值