【办公类-19-03】办公中的思考——Python批量制作word单元格照片和文字(小照片系列)

news2024/11/30 14:36:23

背景需求:

工会老师求助:如何在word里面插入4*8的框

我一听,这又是要手动反复黏贴“文本框”“照片”“文字”的节奏哦

我问:你要做几个人?超过20个,我写个程序批量插图

工会老师:大约十几个人吧,你能直接插图?我一个个弄太麻烦了。

我说:OK,你把照片和文字发给我吧

材料准备:

全部材料路径(红框两个必备)

第一步:word框架

第二步:图片下载,用“序号+名言+JPG” 方式命名照片

代码展示:


'''
工会小照片插入同一个WORD里
阿夏
时间:2023年9月7日)

'''
import os
from PIL import Image 
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


print('----------第1步:把打照片变成小照片------------')

# 减小图片质量像素
pr=r"C:\Users\jg2yXRZ\OneDrive\桌面\工会教师小照片\教师照片座右铭"

# 新建小图文件夹
smallpath=pr[:-7]+'\\'+'教师照片座右铭(小图)'
os.mkdir(smallpath)

imgs1=os.listdir(pr)
print(imgs1)
for img1 in imgs1:
    # print(img1)
    if img1.endswith(".jpg"):
        a=pr+'\\'+img1        

        # 减小图片质量像素
        img = Image.open(a)
        w,h = img.size
        w,h = round(w * 0.2),round(h * 0.2)		
        # // 去掉浮点,防报错
        
        img = img.resize((w,h), Image.ANTIALIAS)
        img.save(smallpath+'\\'+img1, optimize=True, quality=85)        # 9.99MB照片变成127KB	
        # 质量为85效果最好

print('----------第2步:读取写入小照片和文字------------')

path=[]
name=[]
imgs2=os.listdir(smallpath)
for img2 in imgs2:
    if img1.endswith(".jpg"):
        path.append(smallpath+'\\'+img2)
        name.append(img2[2:-4])
print(path)
print(name)

# 制作零时文件夹
lspath=pr[:-7]+'\\'+'零时Word'
os.mkdir(lspath)

# 制作12个docx
for z in range(0,len(path)):   
    doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\工会教师小照片\模板.docx')
#     # 制作列表
    # 单元格位置3*4格
    table = doc.tables[0]          # 4567(8)                 
    k=path[z] 
    k2=name[z]   

    # 写入图片
    run=doc.tables[0].cell(0,0).paragraphs[0].add_run()        # 在第1个表格中第2个单元格内插入国旗
    run.add_picture('{}'.format(k),width=Cm(3.5),height=Cm(6))
    table.cell(0,0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.LEFT #居中  
    
    # 写入序号和生肖名称
    run=table.cell(1,0).paragraphs[0].add_run(k2)    # 在单元格0,0(第1行第1列)输入第0个图图案
    run.font.name = '楷体'#输入时默认华文彩云字体
    # run.font.size = Pt(46)  #输入字体大小默认30号 换行(一页一份大卡片
    run.font.size = Pt(10)  #输入字体大小默认30号 一行里(可以一页两份)
    run.font.bold= True  #是否加粗
    run.font.color.rgb = RGBColor(0,0,0) #数字小,颜色深0-255
    # paragraph.paragraph_format.line_spacing = Pt(180) #数字段间距
    
    r = run._element
    r.rPr.rFonts.set(qn('w:eastAsia'), '楷体')#将输入语句中的中文部分字体变为华文行楷
    table.cell(1,0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中     

    endlisth=lspath+'\\{}.docx'.format(z)
    doc.save(endlisth) 
 
print('----------第3步:doc 文档合并------------') 

# 合并所有Word
import win32com.client as win32
import os
word = win32.gencache.EnsureDispatch('Word.Application')
#启动word对象应用
word.Visible = False
path = lspath
files = []
for filename in os.listdir(path):
    filename = os.path.join(path,filename)
    files.append(filename)
    
#新建合并后的文档(使用模板,进行12个文件夹的合并,把12个文件夹的内容贴到已有的模板(包含0.7边、四分栏))
output = word.Documents.Add(r'C:\Users\jg2yXRZ\OneDrive\桌面\工会教师小照片\模板.docx')
for file in files:
    output.Application.Selection.InsertFile(file)#拼接文档
    #获取合并后文档的内容

doc = output.Range(output.Content.Start, output.Content.End)

# 合并word
lspathall=pr[:-7]+'\\小照片合并打印(需手动整理).docx'

output.SaveAs(lspathall) #保存
output.Close()

print('----------第4步:删除临时文件夹------------')    
import shutil
shutil.rmtree(lspath) #递归删除文件夹,即:删除非空文件夹
shutil.rmtree(smallpath) 

# 合并word打开
lspathall=pr[:-7]+'\\小照片合并打印(需手动整理).docx'


   

终端运行(直接运行)

运行过程中会先出现小图

(这些黄衣服的照片是请摄影师拍摄的,每张图片10MB,如果插到word里,整个word太大了,所以先压缩成小图)

word合并版

发给领导后,领导提示修改意见

这一刻觉得写个代码太值得了,只要微调一个格子,就能批量做13份照片,绝对比人工调13次表格和照片方便!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/986535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023最新pytorch安装教程,简单易懂,面向初学者(Anaconda+GPU)

一、前言 目前是2023.1.27,鉴于本人安装过程中踩得坑,安装之前我先给即将安装pytorch的各位提个醒,有以下几点需要注意 1.判断自己电脑是否有GPU 注意这点很重要,本教程面向有NVIDA显卡的电脑,如果你的电脑没有GPU或者使用AMD显…

2020年09月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程(1~8级)全部真题・点这里 第1题:循环数 若一个n位的数字串满足下述条件,则称其是循环数(cyclic):将这个数字串视为整数(可能带有前导0),并用任意一个 …

Simulink|用于光伏系统最大功率点跟踪(MPPT)的极值寻道控制(ESC)【采用极值寻道控制算法求解非线性函数的最大/最小点】

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

YOLO目标检测——火焰烟雾数据集+已标注VOC和YOLO格式标签下载分享

实际项目应用:火灾预警系统、智能监控系统、工业安全管理、森林火灾监测以及城市规划和消防设计等应用场景中具有广泛的应用潜力,可以提高火灾检测的准确性和效率,保障人员和财产的安全。数据集说明:YOLO火焰目标检测数据集&#…

超图聚类论文阅读2:Last-step算法

超图聚类论文阅读2:Last-step算法 《使用超图模块化的社区检测算法》 《Community Detection Algorithm Using Hypergraph Modularity》 COMPLEX NETWORKS 2021, SCI 3区 具体实现源码见HyperNetX库 工作:提出了一种用于超图的社区检测算法。该算法的主要…

蓝牙技术|ESL蓝牙电子价签将成为智能市场新的增长点

蓝牙技术联盟(Bluetooth Special Interest Group, SIG)发布年度报告《2023年蓝牙市场最新资讯》,揭示蓝牙技术的最新发展趋势,及其在各个应用市场中不断扩大的影响力。报告提供了低功耗音频(LE Audio)和Aur…

数字图像处理-形态学图像处理

形态学图像处理 一、基础知识1.1 什么是形态学操作 二、腐蚀与膨胀2.1 腐蚀2.2 膨胀 三、开操作与闭操作3.1 开操作3.2 闭操作3.3 实验对比 四、一些基本的形态学算法4.1边界提取4.2空洞填充4.3 凸壳 一、基础知识 1.1 什么是形态学操作 数字图像处理中的形态学操作是一组用于…

PY32F003F18串口printf功能

1、PY32F003F18复用功能总结: //GPIOxGPIOA,PinGPIO_PIN_0,alternateGPIO_AF9_USART2,则将PA0引脚复用为USART2_TX //GPIOxGPIOA,PinGPIO_PIN_0,alternateGPIO_AF10_SPI1,则将PA0引脚复用为SPI1_MISO //GPIOxGPIOA,PinGPIO_PIN_1,alternateGPIO_AF0_SPI1,则将PA1引…

容器编排学习(六)服务管理与用户权限管理

一 service管理 1 概述 容器化带来的问题 自动调度:在 Pod 创建之前,用户无法预知 Pod 所在的节点,以及 Pod的IP 地址一个已经存在的 Pod 在运行过程中,如果出现故障,Pod也会在新的节点使用新的IP 进行部署应用程…

安达发APS|APS智能排程软件的核心优势

APS软件是一种实时、具有约束能力的排产计划软件,能够对所有资源进行同步优化。它能够模拟生产中的物料、机器设备、人员、供应、客户需求、运输等影响计划的因素,不论是长期的或短期的计划,都具有优化、对比和可执行性。 APS软件采用基于内…

蓝桥杯官网填空题(土地测量)

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 造成高房价的原因有许多,比如土地出让价格。既然地价高,土地的面积必须仔细计算。遗憾的是,有些地块的形状不规则,比…

echarts条形图实现颜色渐变

eCharts——柱状图中的柱体颜色渐变_echarts 柱状图渐变_小美同学的博客-CSDN博客 【Echarts】柱状图渐变两种实现方式_echarts柱状图渐变_芳草萋萋鹦鹉洲哦的博客-CSDN博客

C++中的stack和queue

文章目录 1. stack的介绍和使用1.1 stack的介绍1.2 stack的使用 2. queue的介绍和使用2.1 queue的介绍2.2 queue的使用 3 priority_queue的介绍和使用3.1 priority_queue的介绍3.2 priority_queue的使用 4. 容器适配器4.1 什么是适配器4.2 STL标准库中stack和queue的底层结构4.…

Vue3学习(仅为了记录,参考意义不大)

一.Vue3介绍 1.Vue3的优势 2.使用create-vue创建vue3项目 vue-cli是创建vue2.0的脚手架工具,create-vue是创建vue3的脚手架工具,create-vue构建速度非常快 3.vue3项目目录和关键文件 二.Vue3组合式API 1.setup选项 setup语法糖: 总结…

fastjson漏洞批量检测工具

JsonExp 简介 版本:1.3.5 1. 根据现有payload,检测目标是否存在fastjson或jackson漏洞(工具仅用于检测漏洞)2. 若存在漏洞,可根据对应payload进行后渗透利用3. 若出现新的漏洞时,可将最新的payload新增至…

湖北初级(助理)、中级、高级(副高)工程类职称申报条件和业绩要求有哪些?

湖北初级、中级、副高职称申报学历条件和业绩要求是什么?有哪些要求?以下来自于官方解答: 副高职称学历要求: 中级职称学历要求: 助理(初级)职称学历要求: 现在评职称,主…

十七、MySQL约束演示

1、约束定义 (1)概念 约束,顾名思义,时作用域表中字段上的规则,用于限制存储在表中的数据,主要用于保证数据库中数据的正确、有效性和完整性。 (2)各种约束分类 1、非空约束(限制…

Win11透明任务栏失效怎么办

近期有小伙伴反映在更新Win11最新版本之后,发现透明任务栏失效了,这是怎么回事呢,遇到这种情况应该怎么解决呢,这里小编就给大家介绍几个Win11透明任务栏失效的解决方法,有需要的小伙伴快来看一看吧。 软件资源&#…

【全网严谨版】L1-016 查验身份证 (C++解法 整理分析了多种方法)

问题描述 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2&#…

二、创建个人首页页面

简介 改造 App.vue 创建一个展示页面,实现一个可以轮播的功能效果。欢迎访问个人的简历网站预览效果 本章涉及修改与新增的文件:style.css、App.vue、assets 一、 自定义全局样式 将 style.css 中的文件样式内容替换为如下代码 /* 初始化样式 --------------------------…