当我们的工程中、日常工作中遇到需要将 PPT 导出成图片的需求,借助一些 PPT 插件即可完成,但如果在 Linux 平台,或需要有大量 PPT 需要处理时,手动转换就会十分麻烦,我们可以借助 python 或 相应的程序,来自动地调用 office PowerPoint(Windows)Libreoffice(Linux) 来帮助我们完成需求

windows平台

windows平台下实现自动化比较简单,只需要使用第三方库调用 office PowerPoint 即可,需要借助 win32com 库实现,可通过 pip3 install pywin32 安装,转换的关键代码如下

import os
import sys
import win32com.client
class WinConverter():def __init__(self):self._ppt_engine = client.Dispatch('PowerPoint.Application')self._ppt_engine.Visible = True# 将单个ppt转换成图片def _ppt2png(ppt_path, imgs_path, ppt_engine):ppt_obj = ppt_engine.Presentations.Open(ppt_path)ppt_obj.SaveAs(imgs_path, 17)ppt_obj.close()# 获取所有路径下所有pptdef _get_all_ppts(path):ppts_path_list = []for root,folder,files in os.walk(path):for f in files:suffix = os.path.splitext(f)[-1].lower()if 'ppt' in suffix:ppt_path = os.path.join(root,f)ppts_path_list.append(ppt_path)return ppts_path_listdef convert(self,root_path):ppts = self._get_all_ppts(root_path)for ppt in ppts:self._ppt2png(ppt)self._ppt_engine.Quit()
converter = WinConverter()
converter.convert(path)

注1:注意需要import win32com.client,不能 from win32com import client

注2:win32com 库也可以用于操作Excel,Word,Outlook软件,进行数据读取、文档解析、邮件发送等功能,是办公自动化中经常使用的库

Linux平台

Linux 平台下经过多种方法尝试,最终使用比较顺畅的方法是,先借助 libreofficeppt 文件转成 pdf ,再借助 imagemagickpdf 转成图片

1.安装 libreoffice

$ apt-get update
$ apt-get upgrade
$ apt-get install libreoffice

2. PPT 转 PDF

$ libreoffice --headless --language=zh-CN --convert-to pdf ppt_path

若转出 pdf 中文为乱码,因为 Linux 平台下没有安装中文字体包,需要将 windowsPowerPoint 对应的常用字体包安装在 linux

# 1.查看是否安装中文字体
$ fc-list :lang=zh
# 2.将 windows 下的 C:\Windows\Fonts 下的中文自己拷贝到 /usr/share/fonbts 下,刷新字体缓存
$ fc-cache -f
# 3.查看是否安装成功
$ fc-list :lang=zh

3.PDF 转 图片

$ apt-get install imagemagick
$ convert pdfPath 自定义字符%d.JPG

全平台通用脚本

可到 gitee仓库 下载

# -*- coding: UTF-8 -*-
import os
import sysdef get_all_ppts(path):# 获取所有 ppt 文件ppt_paths = []for root, _, files in os.walk(path):for f in files:suffix = os.path.splitext(f)[-1].lower()if 'ppt' in suffix:ppt_paths.append(os.path.join(root,f))return ppt_pathsclass LinuxConverter():'''Linux 平台下转换工具借助 libreoffice 和 imagemagick'''def _run_cmd(self, cmd):try:os.system(cmd)except Exception as e:print('[ERROR] ', e)return Falseelse:return Truedef _ppt_to_imgs(self, ppt_path):# ppt - pdf - jpg# libreoffice 多进程会卡死,后续优化cmd = 'libreoffice --headless --language=zh-CN 'cmd += '--convert-to pdf {}>>/dev/null'.format(ppt_path)success = self._run_cmd(cmd)if not success:print('[ERROR] ppt2pdf: {}'.format(ppt_path))return successsuffix = os.path.splitext(ppt_path)[-1]pdf_path = ppt_path.replace(suffix, 'pdf').split('/')[-1]success, _ = self._pdf_to_imgs(pdf_path)if not success:print('[ERROR] pdf2imgs: {}'.format(ppt_path))return successdef _pdf_to_imgs(self, pdf_path):imgs_folder = os.path.splitext(pdf_path)[0]cmd = 'mkdir {}'.format(imgs_folder)success = self._run_cmd(cmd)if not success:print('[ERROR] mkdir: {}'.format(pdf_path))return success, ''cmd = 'convert {} {}/幻灯片%d.JPG'.format(pdf_path, imgs_folder)success = self._run_cmd(cmd)return success, imgs_folderdef convert(self, ppts_path_list, total_count):error_count = 0success_count = 0for idx in range(total_count):ppt_path = ppts_path_list[idx]print('[ {}/{} ] {}'.format(idx+1, total_count, ppt_path))success, _ = self._ppt_to_imgs(ppt_path)if not success:error_count += 1continuesuccess_count += 1return error_count, success_countclass WinConverter():'''Windows 平台下转换工具借助 office PowerPoint'''def __init__(self):try:# 必须以该形式导入 `from win32com import client` 会报错import win32com.clientexcept ImportError:print('当前为windows平台,缺少 win32com 库,请执行 `pip install pywin32` 安装')exit(0)self._ppt_engine = win32com.client.Dispatch('PowerPoint.Application')self._ppt_engine.Visible = Truedef _ppt2jpg(self, ppt_path, imgs_path):ppt_path = os.path.abspath(ppt_path)imgs_path = os.path.abspath(imgs_path)try:ppt = self._ppt_engine.Presentations.Open(ppt_path)ppt.SaveAs(imgs_path, 17)ppt.Close()except Exception as e:print('[ERROR] ppt2imgs: {}'.format(ppt_path))return Falseelse:return Truedef convert(self, ppts_path_list, total_count):error_count = 0success_count = 0for idx in range(total_count):ppt_path = ppts_path_list[idx]print('[ {}/{} ] {}'.format(idx+1, total_count, ppt_path))suffix = os.path.splitext(ppt_path)[-1]imgs_path = ppt_path.replace(suffix,'.JPG')success = self._ppt2jpg(ppt_path,imgs_path)if not success:error_count += 1continuesuccess_count += 1self._ppt_engine.Quit()return error_count, success_countdef convert_ppts_to_imgs(path):if os.path.isdir(path):ppts_path_list = get_all_ppts(path)elif os.path.isfile(path):ppts_path_list = [path]if not ppts_path_list:print('该路径下未找到 ppt 文件')exit(0)plat = sys.platformif 'linux' in plat:converter = LinuxConverter()elif 'win' in plat:converter = WinConverter()total_count = len(ppts_path_list)print('[BEGIN] 共 {} 个 ppt 文件'.format(total_count))error_count, success_count = converter.convert(ppts_path_list, total_count)print('[END] error:{} success:{}'.format(error_count, success_count))if __name__ == '__main__':path = '.'convert_ppts_to_imgs(path)

python脚本1 - PPT导出为图片(WinLinux)相关推荐

  1. python批量将PPT导出成图片集

    导读 需要使用python做一个将很多个不规则PPT导出成用文件夹归纳好的图片集,所以就需要使用comtypes调用本机电脑上的ppt软件,批量打开另存为多张图片 采坑 公司电脑使用comtypes完 ...

  2. python 脚本将视频转化成图片 | python scripts to convert video to pictures

    python 脚本将视频转化成图片 | python scripts to convert video to pictures python video_to_images.py 运行时,修改输入.输 ...

  3. 雨听|在wps中将某一页ppt导出为图片

    在wps中将某一页ppt导出为图片 步骤一:选中想要导出为图片的一页ppt 步骤二: 选择"文件"–>"另存为"–>"其他格式" ...

  4. 环境配置 | 更改注册表使PPT导出的图片分辨率达到300dpi

    环境配置 | 更改注册表使PPT导出的图片分辨率达到300dpi(转) 转载原文链接: http://www.360doc.com/content/18/0621/17/7669533_7641843 ...

  5. VSTO开发PPT插件将PPT导出成图片

    编辑器Visual Studio 2022 官网下载地址 https://visualstudio.microsoft.com/zh-hans/ 安装参考 VSTO开发Powerpoint插件 htt ...

  6. 【实践经验】Latex 使用PPT导出的图片的渲染灰边问题解决

    目录 问题背景 问题原因 解决方法 问题背景 在科研作图中如果使用PPT进行绘图,在导出图片后放在Latex环境下渲染会出现灰色边线问题.实际情况如下所示: 左边是Latex的渲染结果,右边是实际的图 ...

  7. 利用python脚本实现使用typora时图片自动上传到chevereto图床

    欢迎关注原创视频教程 Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.c ...

  8. PPT导出高分辨率图片

    1编辑注册表 WIN + R regedit 2 进入一下目录 创建右边文件 双击编辑 分辨率最高为307 打开PPT 选择要导出的一页 点击文件另存为 选择 生成.tif图片 选择仅当前幻灯片

  9. 【初识python 3】PPT PDF 转图片优化告一段落

    序言 不想起标题,将就看吧 ^ _ ^ 看此片文章之前请先阅读 [初识python 1]Python PPT PDF 转成图片 [初识python 2]对服务端发送PDF EXCEL文件URL转成图片 ...

  10. python脚本下载百度或必应图片

    脚本也是参考有关博客的,但是忘记录地址了,如有侵权立删. 下载百度图片: import re import requests from urllib import error from bs4 imp ...

最新文章

  1. 1048 Find Coins(散列解法)
  2. 在linux 下配置firewalld
  3. SAP BAPI的一些初级资料
  4. 谁是最好的Coder
  5. 阿基米德椭圆规原理,你看懂了吗?
  6. Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包
  7. 计算机科学讲座的策划书,计算机科学与工学院女生新生讲座策划书.doc
  8. voronoi图编程构造_可视化编程真的有那么糟糕?
  9. Windows2003操作系统SQL Server 2008安装图解(详细)
  10. 疯狂星期四,但是程序员
  11. java类库编程_进阶Java编程(5)基础类库
  12. memcacheQueue队列
  13. 帝国cms php循环,帝国CMS listshowclass循环栏目标签
  14. AminoCapital:大数据+机械学习引领今年硅谷趋势
  15. 如何判断您是否需要新的iPhone电池
  16. 护卫神6588端口提权
  17. 30天入门 Android 开发, Google 与你一起圆梦
  18. poj2421修建道路
  19. matlab如何读取二维数组,Matlab从csv文件中读取多个二维数组
  20. Java基础进阶-评委打分系统

热门文章

  1. python弹幕分析_用Python抓取bilibili弹幕并分析
  2. Relation Graph 人物关系图
  3. goldendict 屏幕取词
  4. 大众点评字体_大众点评字体反爬
  5. ROS-ubuntu-系统安装
  6. UVA 1449 Dominating Patterns(AC自动机)
  7. 攻防世界Web新手区题解
  8. selenium 浏览器打开新标签页
  9. 【20220318】执行脚本提示killed
  10. java如何运行jsp文件_jsp文件怎么打开(java