背景需求:
前期使用五款字体制作了吉祥字门贴的设计,在掌握五款空心字在15*15CM手工纸内最适合的大小结构后,则需要制作“五款福字”——用统一个文本框模板,写入不同空心字体的“福字”
链接5个
通过梳理得知:
1、福字菱形纸1.0- 华光通心圆_CNKI 段落固定值310 字体大小290
2、吉祥字菱形纸2.0-红豆空心黑体 段落固定值290 字体大小290
3、吉祥字菱形纸3.0-文艺空心黑体 段落固定值310 字体大小290
4、吉祥字菱形纸4.0-华文彩云 段落固定值290 字体大小280
5、吉祥字菱形纸5.0-华光彩云_CNKI 段落固定值310 字体大小290
为了确保五款字体共同一个模板时,不会出现字体边缘缺失,因此使用最小的字体和段落,也就是华文彩云 段落固定值290 字体大小280
素材准备:
页面设置
插入形状-菱形(用Shift拉出正菱形)
设置 字体(空心字) 字体大小
文本框中字体的段落设置(让文字尽量在菱形的中心)
最后样式
代码准备:
'''
目的:吉祥字菱形纸6.0(福字贴1.0)-五种空心字 段落固定值290 字体大小280
作者:阿夏
时间:2024年2月3日
'''
# https://zhuanlan.zhihu.com/p/479015404
# # 在word中插入文本框
# # 打开一个已经存在的word,写入一个文本框,内容是123
# doc_app = win32.gencache.EnsureDispatch('Word.Application')#打开word应用程序
# doc_app.Visible =1#设置应用程序可见
# doc = doc_app.Documents.Open(r'C:\Users\jg2yXRZ\OneDrive\桌面\福字\福字12.docx')#打开文档
# shp = doc.Shapes.AddTextbox(Orientation=1, Left=100, Top=100, Width=100, Height=100)
# shp.TextFrame.TextRange.Text = '123'#编辑文本框的内容
# # 另存为
# new_file_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\福字\福字12_new.docx' # 新文件路径和名称
# doc.SaveAs(new_file_path) # 另存为新文件
# # 关闭兼容模式,退出原始模板
# doc.Convert()
# doc.Close() # 关闭原始文件
# doc_app.Quit() # 退出Word应用程序
# 打开一个已经存在的word,看有几个文本框
import win32com.client as win32
from win32com.client import constants
import os,time
ztall='五款空心字'
# # # print('----------第2步:新建一个临时文件夹------------')
# # # # # 新建一个”装N份word和PDF“的文件夹
# os.mkdir
imagePath1=r'C:\Users\jg2yXRZ\OneDrive\桌面\福字\零时Word'
if not os.path.exists(imagePath1): # 判断存放图片的文件夹是否存在
os.makedirs(imagePath1) # 若图片文件夹不存在就创建
num=int(input('一共几人(必须5的倍数,如30)\n'))
zt=[]
z=['华光通心圆_CNKI','红豆空心黑体','文艺空心黑体','华文彩云','华光彩云_CNKI']
for w in range(int(num/5)): # 循环6次
for b in z:
zt.append(b)
print(zt)
# 简体
a='福'
TXT =[]
for aa in range(num):
TXT.append(a)
print(TXT)
print(len(TXT))
# 15字
for nn in range(len(TXT)):
doc_app = win32.gencache.EnsureDispatch('Word.Application')#打开word应用程序
doc_app.Visible =0 #设置应用程序可见 word不要打开
doc = doc_app.Documents.Open(r'C:\Users\jg2yXRZ\OneDrive\桌面\福字\福字_五款空心字.docx' )#创建新得文档
# # 正文几个文本框
# print(doc.Shapes.Count)
# # 提取正文里面的文本框的内容
for shape in doc.Shapes:
# print(shape.TextFrame.TextRange.Text)
wrapFormat = shape.WrapFormat
wrapFormat.Type = constants.wdWrapThrough
# # 更改文本框的内容 默认和原来的格式一样(字体 大小 颜色)
# 写入的内容——福字
shape.TextFrame.TextRange.Text = TXT[nn]
# 写入的字体
shape.TextFrame.TextRange.Font.Name = zt[nn]
# 某个字体,就把字体加粗
if zt[nn]=='文艺空心黑体':
shape.TextFrame.TextRange.Font.Bold = True
else:
pass
# # 设置文本框中字体颜色和大小
# textFont = shape.TextFrame.TextRange.Font
# textFont.ColorIndex = constants.wdGreen #设置字体颜色
# textFont.Size = 40 # 设置字体,单位为磅,可以网上搜索到字体大小和磅的对应关系
# # 设置文本框颜色
# # LineFormat = shp.Line
# # LineFormat.ForeColor.RGB = 0xFFFFFF # 设置文本框颜色为白色
# 页眉页脚文本框内容
# wd_section = doc.Sections(1)#注意section内部成员编号是从1开始的
# print(wd_section.Headers(constants.wdHeaderFooterPrimary).Shapes.Count)
# print(wd_section.Footers(constants.wdHeaderFooterPrimary).Shapes.Count)
# 提取页眉页脚里面的文本框的内容
# for shape in wd_section.Footers(constants.wdHeaderFooterPrimary).Shapes:
# print(shape.TextFrame.TextRange.Text)
# doc.Convert()
# 另存为
new_file_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\福字\零时Word\{}.docx'.format('%02d'%nn) # 新文件路径和名称
doc.SaveAs(new_file_path) # 另存为新文件
# 关闭模板
doc.Close() # 关闭原始文件
doc_app.Quit() # 退出Word应用程序
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)
time.sleep(2)
print('----------第4步:把都有PDF合并为一个打印用PDF------------')
# 多个PDF合并(CSDN博主「红色小小螃蟹」,https://blog.csdn.net/yangcunbiao/article/details/125248205)
import os
from PyPDF2 import PdfMerger
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 = PdfMerger()
for pdf in pdf_lst:
print(pdf)
file_merger.append(pdf)
file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/福字/(打印合集){}简体 ({}人共{}张).pdf".format(ztall,len(TXT),len(TXT)))
file_merger.close()
# doc.Close()
# print('----------第5步:删除临时文件夹------------')
import shutil
shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/福字/零时Word') #递归删除文件夹,即:删除非空文件夹o
终端输入:
一、先输入5(因为只有5款字体)
结果显示:
设置了if 加粗的结果
五款空心字体中的,遇到文艺空心黑体,就默认加粗
二、输入30(30个孩子,等于5款字体复制6次)
5