PPT转换成图片及合成长图

背景

Web项目需要将ppt转换成图片,以便使用浏览器预览。另外宣传时需要长图,可以将ppt快速转换成一张图。

依赖

  • ppt转换成图片需要使用到win32com,安装方法: pip install pypiwin32
  • 图片拼接成一张图需要使用到PIL(Python Image Library——python的第三方图像处理库)的Image。安装方法:pip install pillow

效果

PPT有3页,生成的图片如下:

自动拼接成一张图:

 

 完整代码

# -*- coding: UTF-8 -*-
import os
import shutil

import win32com
import win32com.client
# from win32com.client import constants
from PIL import Image

# wc = win32com.client.constants
def output_file(ppt_path):
    """
    判断文件是否存在并生成图片保存目录
    :param ppt_path: ppt文件路径
    :return: 文件保存目录
    """
    output_path = ""
    if os.path.exists(ppt_path):
        file_path, full_name = os.path.split(ppt_path) # 将文件路径拆分成路径和文件名(带后缀)
        fname, ext = os.path.splitext(full_name)
        output_path = os.path.join(file_path, fname)
        if os.path.isdir(output_path):
            shutil.rmtree(output_path)
        os.mkdir(output_path)
    return output_path




def ppt2png(ppt_path, long_sign: str):
    """
    ppt 转 png 方法
    :param ppt_path: ppt 文件的绝对路径
    :param long_sign: 是否需要转为生成长图的标识
    :return:
    """
    if os.path.exists(ppt_path):
        output_path = output_file(ppt_path)  # 判断文件是否存在

        ppt_app = win32com.client.Dispatch('PowerPoint.Application')
        # 设置为0表示后台运行,不显示,1则显示
        ppt_app.Visible = 1
        ppt = ppt_app.Presentations.Open(ppt_path)  # 打开 ppt
        ppSaveAsJPG = 17
        ppt.SaveAs(output_path, ppSaveAsJPG)  # 17表示 ppt 转为图片
        ppt_app.Quit()  # 关闭资源,退出

        if 'Y' == long_sign.upper():
            generate_long_image(output_path)  # 合并生成长图

    else:
        raise Exception('请检查文件是否存在!\n')


def generate_long_image(output_path):
    """
    将ppt的各个页面拼接成长图
    :param output_path:
    :return:
    """
    picture_path = output_path
    last_dir = os.path.dirname(picture_path)  # 上一级文件目录

    # 获取图片列表
    # ims = [Image.open(os.path.join(picture_path, fn)) for fn in os.listdir(picture_path) if fn.endswith('.jpg')]
    ims = []
    for fn in os.listdir(picture_path):
        if fn.lower().endswith('.jpg'):
            ims.append(os.path.join(picture_path, fn))

    print(ims)

    width, height = Image.open(ims[0]).size  # 取第一个图片尺寸
    long_canvas = Image.new(Image.open(ims[0]).mode, (width, height * len(ims)))  # 创建同宽,n倍高的空白图片

    # 拼接图片
    for i, image in enumerate(ims):
        long_canvas.paste(Image.open(image), box=(0, i * height))

    long_canvas.save(os.path.join(last_dir, 'long-image.png'))  # 保存长图

if __name__ == '__main__':
    # # ppt_path = "test_template.pptx"
    cur_path = os.getcwd()
    print(cur_path)
    ppt_path = os.path.join(cur_path, "test.ppt") # 需要使用绝对路径,否则会报错
    long_sign = "y"
    ppt2png(ppt_path, long_sign)



 

ppSaveAsJPG = 17

其他值的含义参见:

 

python使用win32com的心得 - Forever的个人页面 - OSCHINA - 中文开源技术交流社区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值