python将图片批量排版插入Word文档

news2024/11/19 14:52:06

今天分享一个将图片批量插入word文档的小脚本,本脚本可以实现 jpg\png图片,可以混合在一起!

首先 我们需要设置每页word文档的排版需求,如:每页6张图片,一共是3行2列

pics_per_page = 6,这是每页几张图片

pics_per_row = 2,这是每行几张图片

视频展示,看一下是否是你想要的效果:

在这里插入图片描述

奉上全部的代码:

pic_folder = “./图片存放”,这里是你的图片存放的文件夹地址

import os
from PIL import Image
from docx import Document
from docx.shared import Inches
def f2():
    # 设置每页6张图片,每行2张图片
    pics_per_page = 6
    pics_per_row = 2

    # 创建新的Word文档
    doc = Document()

    # 获取指定文件夹中的所有图片文件
    pic_folder = "./图片存放"
    pic_files = os.listdir(pic_folder)
    pic_files = [f for f in pic_files if f.endswith('.jpg') or f.endswith('.png')]

    # 按照要求插入图片
    for i, pic_file in enumerate(pic_files):
        # 在新的一页开始时添加分页符
        # if i % pics_per_page == 0:
        #     doc.add_page_break()
        #
        # 在新的一行开始时添加段落
        if i % pics_per_row == 0:
            p = doc.add_paragraph()

        # 插入图片
        img_path = os.path.join(pic_folder, pic_file)
        img = Image.open(img_path)
        width, height = img.size
        aspect_ratio = height / float(width)
        new_width = 2.7
        new_height = aspect_ratio * new_width
        p.add_run().add_picture(img_path, width=Inches(new_width), height=Inches(new_height))

    # 保存文档
    doc.save('pics.docx')

f2()

进阶版-将图片的名字放在图片的下面

def f2():
    # 设置每页6张图片,每行2张图片
    pics_per_page = 6
    pics_per_row = 2

    # 创建新的Word文档
    doc = Document()

    # 获取指定文件夹中的所有图片文件
    pic_folder = "./修改尺寸后"
    pic_files = os.listdir(pic_folder)
    pic_files = [f for f in pic_files if f.endswith('.jpg') or f.endswith('.png')]

    # 按照要求插入图片
    count = 0
    f_n_list = []
    for i, pic_file in enumerate(pic_files):
        # 在新的一页开始时添加分页符
        # if i % pics_per_page == 0:
        #     doc.add_page_break()
        #
        # 在新的一行开始时添加段落
        if i % pics_per_row == 0:
            p = doc.add_paragraph()

        # 插入图片
        img_path = os.path.join(pic_folder, pic_file)
        img = Image.open(img_path)
        width, height = img.size
        aspect_ratio = height / float(width)
        new_width = 2.5
        new_height = aspect_ratio * new_width
        p.add_run().add_picture(img_path, width=Inches(new_width), height=Inches(new_height))
        # doc.add_paragraph(os.path.basename(pic_file))# 可以的,就是名字上下排
        count+=1
        f_n_list.append(os.path.basename(pic_file))
        # print(count)
        if count % 2 == 0:
            doc.add_paragraph().add_run('                            '.join(f_n_list)).font.size = Pt(9)
            count = 0
            print(f_n_list)
            f_n_list.clear()

    # 保存文档
    doc.save('pics.docx')

f2()

此外该专栏还写有多篇关于python操作word的文章,欢迎大家关注、订阅观看

在这里插入图片描述

希望对大家有帮助,如有错误,欢迎指正

致力于办公自动化的小小程序员一枚

希望能得到大家的【一个免费关注】!感谢!

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

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

相关文章

解说天下之操作系统

解说天下之操作系统 本文由桌案drawon (https://www.drawon.cn),云晶(https://www.yunjingxz.com)创始人根据多年从业经验, 从操作系统的起源,应用分类, 设计分类,以及资源使用角度对操作系统进…

leetcode 数据库题 175~185

leetcode 数据库题 175. 组合两个表176. 第二高的薪水177. 第N高的薪水178. 分数排名180. 连续出现的数字181. 超过经理收入的员工182. 查找重复的电子邮箱183. 从不订购的客户184. 部门工资最高的员工185. 部门工资前三高的所有员工小结 嗯。。。数据库题目就不贴原题内容了&…

00后是真卷不过,工作没两年,跳槽到我们公司起薪20K都快接近我了

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&…

cocosCreator自动化打包工具

前言: 使用nodeJs脚本化Cocos Creator自动化构建、编译。 版本:cocosCreator2.4.5。 简述:使用自动化构建-编译工具前提,你终端上配置了相关的环境,比如JDK、NDK、SDK(对于原生平台)&#xff0c…

Express实战个人订阅号实现网站登录

今天我们来实现一个使用个人订阅号实现网站的功能,后端使用的是 express 。其它框架原理基本一致,只是定义路由或返回响应数据部分代码跟 express 有所出入。先来一波效果图: 1. 前言 20 年 3 月在掘金写过一篇文章,介绍了使用 e…

使用cmake 构建构建新项目的时候,编译提示库找不到怎么办?

昨天帮其他部门同事解决Linux下Qt编译找不到Qt 依赖库 core的问题。过程很有特征性,可以推广到Linux下使用cmake构建项目时找不到库文件的广泛性问题。 先上图,结合事情经过讲述: 事情经过: 这里给大家介绍第一个重点&#xff1…

秘塔写作猫

秘塔写作猫是集AI智能写作、多人协作、改写润色、文本校对等功能为一体的AI原生创作平台,可以帮助不同群体大幅提升写作效率和生产力。 接下来小编就带大家了解一下该软件具体的一些功能,不论你是学生、上班族还是自媒体从业者等,该工具绝对可…

箭头函数与普通的函数有什么区别-M

箭头函数与普通的函数有什么区别 1、写法不同 在 js 中,像命名式函数、函数表达式都称为普通函数。对于普通函数,需要用function关键字来声明。而箭头函数则不需要使用function关键字,在箭头前面的括号里面写参数,后面的大括号里…

Linux 安装MySQL-5.7.30

1.官网下载MySQL 进入官网https://www.mysql.com/ 从下载页面下载社区版本其中社区版本免费,免费的午餐不提供技术支持. 页面中MySQL Enterprise Edition是企业版,企业版收费但是会提供技术支持, 点击图中红框下载社区版本 选择Download Arc…

AC,AP以及三阶段项目

特点:access:连接终端设备 只能通过1个vlan trunk:交换机与交换机相连 可以通过多个vlan 共同特点:交换机的端口收发数据的规则: 收:如果收到的数据,没有携带任何标签,则使用该端口…

01SpringCloudRibbon负载均衡

Ribbon负载均衡 Ribbon Eureka帮我们集成了负载均衡组件:Ribbon,简单修改代码即可使用。 什么是Ribbon:客户端负载均衡组件 开启负载均衡 1、Eureka中已经集成了Ribbon,所以我们无需引入新的依赖,直接修改代码。 2、…

Redis的主从集群搭建与配置

文章目录 Redis主从集群模式搭建过程分级管理容灾冷处理 Redis主从集群模式 Redis的集群模式 主从复制模式:利用主从复制原理,一主多从架构。读写分离,主节点可读可写,从节点只能提供读服务。哨兵模式:哨兵实现了自动化…

Vue 3 + Element Plus 简单用法

Element Plus: A Desktop UI toolkit for Vue.js 即 Vue 桌面 UI 工具包 基于 Vue 2 的组件库和基于 Vue 3 的组件库安装方法不同,基于 Vue 3 的组件库叫做 Element Plus。 MDBootstrap 与 Element UI 区别: MD Bootstrap vs ElementUI: W…

如何在金融企业推进故障演练?中国人寿分阶段实践总结

一分钟精华速览 越来越多企业正在通过故障注入和演练的方式提升系统可靠性,这其中金融行业的应用较为特殊。一方面其可靠性要求比非涉账类系统更高;另一方面金融行业有更加严格的监管要求,如客户、账目等信息都有严格约束。加之金融系统较其…

ActiveMQ基础学习简单记录

ActiveMQ基础学习简单记录 JMS是什么JMS消息模型JMS Message Type Activemq安装概念强化JMS的跨平台性JMS通用接口JMS希望达到的目标是什么 Activemq发送消息的三种模式至少一次至多一次精确一次可重复确认模式小结 Activemq支持众多协议Activemq支持的定时消息,延迟消息,优先级…

【C++技能树】类和对象的使用 --初始化列表,static,友元,内部类,匿名对象的理解与使用

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法…感兴趣就关注我bua! 类和对象的使用 0. 初始化列表explicit关键字 1.Static静态成员变量2.友元2.1.友元函数2.2.友元类 3.内部类4.匿名对象4.匿名对象至此初始化列表,static…

【Linux】2. Shell运行原理与Linux权限操作

专栏导读 🍁作者简介:余悸,在读本科生一枚,致力于 C方向学习。 🍁收录于 C 专栏,本专栏主要内容为 C 初阶、 C 进阶、 STL 详解等,持续更新中! 🍁相关专栏推荐&#xff1…

Cloud Studio 有“新”分享

GitHub仓库推荐 Awesome Open Source Applications - 收集了各种开源应用程序,包括 Web 应用、桌面应用、移动应用等。Cloud Studio 一键运行 Free for Dev - 收集了各种免费的开源应用程序和工具,包括 Web 应用、桌面应用、移动应用等。Cloud Studio 一…

kaggle经典赛 | IEEE欺诈检测竞赛金牌方案分享

https://www.kaggle.com/competitions/ieee-fraud-detection 赛题背景 想象一下,站在杂货店的收银台,身后排着长队,收银员不那么安静地宣布你的卡被拒绝了。在这一刻,你可能没有考虑决定你命运的数据科学。 尴尬,并…

一文搞定验证码(上部分)

1.背景 目前收到反馈,存在一类用户,在利用会员权益大量进行二次销售;而且还是自动进行操作的. 那么意味着他们有一个自动平台在对我们的商品进行二次销售. 这是就该我们的主角登场了. 验证码模块可以有效防止机器人刷接口 2.开源验证码框架 通过在网上查找资料, 发现了几个验…