当前位置: 首页 > article >正文

【教学类-89-02】20250128新年篇02——姓名藏头对联(星火讯飞+Python,五言对联,有横批)

背景需求:

过年了,我想用幼儿的名字写对联,但是我根本不会写,于是尝试让AI来写。

1.我班的孩子的名字都是2字和3字的

2.惊喜发现,AI它很快就能生成带名字的对联

但是观察发现,如果是二个名字的对联,它就用这两个字做头字,但如果三个字、四个字,它会随机取第1字、第3字、第2字中的两个(1和3,或者2和3),而不是用最后面两个字(2和3,不包含姓,1)

可是我希望只用幼儿的“名”,所以我把幼儿的名字变成2个字(两个名字就保留,三个名字删除姓氏,四个名字删除姓氏和第第二个字。)

再次输入:并且希望它变成个表格,方便我用Python遍历

关键词

(幼儿名字,保留最后两个字)

“XX

XX

XX

对每个名字,写一幅5字对联,如果名字是三个字就用后面2个字写,如果是名字只有二个字,就用着两个字写。表格形式呈现

只有两个字,对联肯定就用这两个字了。

素材准备

EXCLE:把AI表格复制到EXCEL内

两个WORD模版

对联(A4一页两条对联*2,必须是2的倍数)

这里是30人,15张A4

横批(A4一页五条*1,必须是5的倍数)
这里是30人,6张A4

代码展示:

'''
幼儿姓名的对联制作
星火讯飞(AI生成对联、AI生成Python代码)、阿夏
20250114
'''
import openpyxl
import os 
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
import random

import os,time
import docx
from docx import Document
from docx.shared import Inches,Cm,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

txt='华文隶书'
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\对联'

# 打开Excel文件
workbook = openpyxl.load_workbook(path+r'\名字.xlsx')

# 选择活动的工作表
sheet = workbook.active

# 创建一个空列表来存储单元格数据
data_list = []

# 遍历工作表中的所有行和列
for row in sheet.iter_rows(min_row=2, values_only=True):
    for cell in row:
        data_list.append(cell)

# 打印结果
print(data_list)


# 将列表分为每5个一组的嵌套列表
nested_list = [data_list[i:i + 5] for i in range(0, len(data_list), 5)]

# 打印结果
print(nested_list)

print('---------1、制作对联----------')

# 遍历嵌套列表并提取特定索引的值(不要第2列的名字)
extracted_values = [[str(sublist[0]), str(sublist[0]), sublist[2], sublist[3]] for sublist in nested_list if len(sublist) >= 5]

# 打印结果
print(extracted_values)


# 将 extracted_values 取消嵌套
flattened_list = [item for sublist in extracted_values for item in sublist]

# 打印结果
print(flattened_list)

# 每10个元素提取一次
chunks = [flattened_list[i:i + 8] for i in range(0, len(flattened_list), 8)]

# 打印结果
print(chunks)
print(len(chunks))


# 创建临时文件夹
new_folder = path+r'\零时文件夹'
os.makedirs(new_folder, exist_ok=True)

for nn in range(0,int(len(chunks))):    
    doc = Document(path+r'\对联.docx')

    # 单元格位置3*4格
    bg=[]
    for x in range(0,2):        # 4行
        for y in range(0,2):    # 3列
            ww=f'{x:02}{y:02}'
            bg.append(ww)
    for x in range(0,2):        # 4行
        for y in range(2,4):    # 3列
            ww=f'{x:02}{y:02}'
            bg.append(ww)
    print(bg)   
    # ['00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01']

    table = doc.tables[0]          # 4567(8)行

    for t in range(len(bg)):   # 02
        pp = int(bg[t][0:2])    
        qq = int(bg[t][2:4])  
        k = chunks[nn][t] 
      
        print(pp, qq, k)
        print(k)  
        
        # 写入序号和生肖名称
        run = table.cell(pp, qq).paragraphs[0].add_run(' '.join(map(str, k)))    # 在单元格0,0(第1行第1列)输入第0个图图案
        run.font.name = txt # 输入时默认华文彩云字体
        # run.font.bold = True  # 是否加粗
        run.font.bold = False  # 是否加粗
        run.font.color.rgb = RGBColor(200, 200, 200) # 数字小,颜色深0-255
        
        if pp == 0:
            run.font.size = Pt(28)  # 如果单元格是(0,X),就把输入的文字的字体改成28
        else:
            run.font.size = Pt(116)  # 其他情况下保持默认字体大小

        r = run._element
        r.rPr.rFonts.set(qn('w:eastAsia'), txt) # 将输入语句中的中文部分字体变为华文行楷
        table.cell(pp, qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中    

        doc.save(new_folder + fr'\\{nn:02}.docx')

import os
from docx2pdf import convert
from PyPDF2 import PdfMerger

# 定义文件夹路径
input_folder = new_folder
output_folder = path+r'\PDF'
os.makedirs(output_folder,exist_ok=True)

merged_pdf_path = os.path.join(output_folder, '01对联.pdf')

# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)

# 将DOCX文件转换为PDF
convert(input_folder)

# 获取转换后的PDF文件列表
pdf_files = [f for f in os.listdir(input_folder) if f.endswith('.pdf')]

# 创建PDF合并器对象
merger = PdfMerger()

# 将所有PDF文件添加到合并器中
for pdf in pdf_files:
    pdf_path = os.path.join(input_folder, pdf)
    merger.append(pdf_path)

# 将合并后的PDF保存到指定位置
merger.write(merged_pdf_path)
merger.close()

print(f"所有PDF已合并并保存到 {merged_pdf_path}")

import shutil
shutil.rmtree(new_folder)


print('---------1、制作横批----------')

# 遍历嵌套列表并提取特定索引的值(不要第2列的名字)
extracted_values = [[str(sublist[0]), str(sublist[4])] for sublist in nested_list if len(sublist) >= 5]

# 打印结果
print(extracted_values)


# 将 extracted_values 取消嵌套
flattened_list = [item for sublist in extracted_values for item in sublist]

# 打印结果
print(flattened_list)

# 每10个元素提取一次(1个人2条,一页需要5人,10个一组,等于30条等于6页
chunks = [flattened_list[i:i + 10] for i in range(0, len(flattened_list), 10)]

# 打印结果
print(chunks)
print(len(chunks))


# 创建临时文件夹
new_folder = path+r'\零时文件夹'
os.makedirs(new_folder, exist_ok=True)

for nn in range(0,int(len(chunks))):    
    doc = Document(path+r'\横批.docx')

    # 单元格位置3*4格
    bg=[]
    for x in range(0,5):        # 4行
        for y in range(0,2):    # 3列
            ww=f'{x:02}{y:02}'
            bg.append(ww)
    print(bg)   
    # ['00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01']

    table = doc.tables[0]          # 4567(8)行

    for t in range(len(bg)):   # 02
        pp = int(bg[t][0:2])    
        qq = int(bg[t][2:4])  
        k = chunks[nn][t] 
      
        print(pp, qq, k)
        print(k)  
        
        # 写入序号和生肖名称
        run = table.cell(pp, qq).paragraphs[0].add_run(' '.join(map(str, k)))    # 在单元格0,0(第1行第1列)输入第0个图图案
        run.font.name = txt  # 输入时默认华文彩云字体
        # run.font.bold = True  # 是否加粗
        run.font.bold = False  # 是否加粗
        run.font.color.rgb = RGBColor(200, 200, 200) # 数字小,颜色深0-255
        
        if qq == 0:
            run.font.size = Pt(28)  # 如果单元格是(0,X),就把输入的文字的字体改成28
        else:
            run.font.size = Pt(109)  # 华文隶书字体下横批最大109,否则就两行了

        r = run._element
        r.rPr.rFonts.set(qn('w:eastAsia'), txt) # 将输入语句中的中文部分字体变为华文行楷
        table.cell(pp, qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中    

        doc.save(new_folder + fr'\\{nn:02}.docx')

import os
from docx2pdf import convert
from PyPDF2 import PdfMerger

# 定义文件夹路径
input_folder = new_folder
output_folder = path+r'\PDF'
os.makedirs(output_folder,exist_ok=True)

merged_pdf_path = os.path.join(output_folder, '02横批.pdf')

# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)

# 将DOCX文件转换为PDF
convert(input_folder)

# 获取转换后的PDF文件列表
pdf_files = [f for f in os.listdir(input_folder) if f.endswith('.pdf')]

# 创建PDF合并器对象
merger = PdfMerger()

# 将所有PDF文件添加到合并器中
for pdf in pdf_files:
    pdf_path = os.path.join(input_folder, pdf)
    merger.append(pdf_path)

# 将合并后的PDF保存到指定位置
merger.write(merged_pdf_path)
merger.close()

print(f"所有PDF已合并并保存到 {merged_pdf_path}")

import shutil
shutil.rmtree(new_folder)


print('---------3、对联横批合并----------')

# 定义文件夹路径
input_folder = path+r'\PDF'
output_folder = path
os.makedirs(output_folder,exist_ok=True)

merged_pdf_path = os.path.join(output_folder, f'01幼儿姓名的对联横批{int(len(flattened_list)/4)}人.pdf')

# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)

# 将DOCX文件转换为PDF
convert(input_folder)

# 获取转换后的PDF文件列表
pdf_files = [f for f in os.listdir(input_folder) if f.endswith('.pdf')]

# 创建PDF合并器对象
merger = PdfMerger()

# 将所有PDF文件添加到合并器中
for pdf in pdf_files:
    pdf_path = os.path.join(input_folder, pdf)
    merger.append(pdf_path)

# 将合并后的PDF保存到指定位置
merger.write(merged_pdf_path)
merger.close()

print(f"所有PDF已合并并保存到 {merged_pdf_path}")

import shutil
shutil.rmtree(input_folder)


作品展示

用红色A4纸打印出来(因为红色纸已经做了蛇年红包和福字贴,不够了,我只打印了当天来园孩子的名字)

裁纸机切割

没来的孩子纸张背面又打印了一位来园孩子的名字对联

教学展示

时间:2025年1月14日

班级:中2班

人数:11人

看视频:了解对联的习俗(桃符)及贴法

对联和横批配好了,按学号摆放,幼儿找自己的名字

按学号来领取(先男后女)

幼儿描对联(要求是各种黑色笔、但幼儿用了黑色和彩色笔)

剪对联

这位孩子把灰色部分都描粗了,很像毛笔字

大部分孩子都是线描,把灰色变成黑色线条即可


准备贴门帘

(黏贴雌雄扣,雄扣,尖头)

因为不确定幼儿会把雌帖贴在红对联背面的什么位置,我就随即贴了很多雄扣,最好是剪一块,但我没有准备,只能“将就”使用用

幼儿贴对联及合影

 

感悟

1.AI模型太强大了:用AI批量写幼儿的姓名藏头诗,它写的太好了,都是吉祥的祝福,有语境,有内涵,仿佛家长取名时就是考虑到这些意义。

2.幼儿写对联方式:用Python批量制作成对联横批样式,幼儿用黑色笔描画。制作属于自己的独特对联。大部分幼儿对汉字不感兴趣,只是描红了。个别孩子颜色选择、画笔选择和添画图案上进行了设计。

后续:

门上扣子清理

因为横批封住了门,所以拍照期间,两位搭档老师都是从后门走来。

中午,搭档说:我刚才看见门上有白色东西,我想它们一直有吗?平时怎么没有注意到?”

我说:是我刚才贴的,我会拔下来的

第二天孩子们做“换装书”制作

我让他们把门上的白色扣子手抠下来,用在“换装书”作品上。两位女孩说:扣不动(黏贴太牢了)

于是我预先把扣子抠下一半,然后他们再硬拔下来。

门上的雌雄扣被开了个口子,孩子容易捏着边,硬拔了(照片没有拍)

依靠动作快的孩子们,总算把门上的扣子回收的收尾工作做好了。孩子们对“拔钉子”有一定的参与兴趣。

后续思考:

1、制作独一无二的名字对联,很有意义。家长看照片时觉得“很有新意。”

2、学号数字比较小,在红色背景下看不清楚,下次把学号字体换成黑体,用黑色。

3.、对联反面的扣子黏贴位置,如何确定


http://www.kler.cn/a/522923.html

相关文章:

  • 洛谷P3884 [JLOI2009] 二叉树问题(详解)c++
  • 能说说MyBatis的工作原理吗?
  • 改进候鸟优化算法之四:基于动态环境的MBO算法(D-MBO)
  • 中文输入法方案
  • Qt文件操作
  • ChirpIoT技术的优势以及局限性
  • 项目测试之MockMvc
  • 【数据结构与算法】九大排序算法实现详解
  • 中科大:LLM检索偏好优化应对RAG知识冲突
  • 面向对象设计原则 - SOLID原则 (基于C++)
  • [Dialog屏幕开发] 设置方式对话框
  • 使用eNSP配置GRE VPN实验
  • 基于51单片机和ESP8266(01S)、8X8点阵屏的二进制WiFi时钟
  • 什么是循环神经网络?
  • python.tkinter设计标记语言(渲染7-动态呈现标签) - 副本
  • 1.2第1章DC/DC变换器的动态建模-1.2Buck-Boost 变换器的交流模型--电力电子系统建模及控制 (徐德鸿)--读书笔记
  • game101 环节搭建 windows 平台 vs2022
  • doris:STRUCT
  • 【阅读笔记】New Edge Diected Interpolation,NEDI算法,待续
  • 跨域问题解释及前后端解决方案(SpringBoot)
  • 接口技术-第2次作业
  • Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)
  • AAAI2024论文合集解读|Multi-dimensional Fair Federated Learning-water-merged
  • IBMSamllPower服务器监控指标解读
  • 【数据库初阶】表的查询语句和聚合函数
  • leetcode 2920. 收集所有金币可获得的最大积分