Windows python自动播放PPTX文件幻灯片解决办法(本质是调用电脑的应用程序实现)

发布于:2024-12-06 ⋅ 阅读:(33) ⋅ 点赞:(0)

近期接手一个项目,需要在分屏投影的基础上需要实现播放ppt文件的幻灯片操作,因为用户不想文件在客户端上传之后,共享给会议所有参与人时还要一个一个点开查看,同时大屏也没办法直接显示,所以需求这不就来了,需要在投影桌面所在的界面以幻灯片的形式打开相应的ppt文件。好了,废话不多说正文开始!

项目基本结构

没有,( * ^ ▽ ^ * ) 哈哈哈,没必要说这个,主要就是实现方法罢了!

方法代码

	""" 
	封装的对外调用接口,只需要传入文件的本地绝对路径即可,
	也可以自行修改为读取远程文件,不做过多阐述,可以自行百度实现
	"""
    def embed_powerpoint(self, pptx_path: str):
        try:
            self._embed_powerpoint(pptx_path)
            # 也可以通过新的线程来执行,此处是因为我需要执行成功后返回状态确认,所以才使用阻塞
            # threading.Thread(target=self._embed_powerpoint, args=(pptx_path,)).start()
            return {'code': 200, 'result': True}
        except Exception as ex:
            self.log.error(f'打开pptx出现错误:{ex}')
            if not self.is_showing:
                return {'code': 404, 'result': False}
	
	"""
	对封装方法依次调用,按照Office-> Wps 的顺序找打开ppt文件的程序。
	"""
    def _embed_powerpoint(self, pptx_path: str):
        try:
            self._office_pptx(pptx_path)
        except Exception as e:
            self.log.info("无法连接到PowerPoint:", e)
            # 尝试使用win32com连接到WPS Office的COM接口(如果知道的话)
            self._wps_pptx(pptx_path)
            self.log.info("连接到WPS Office成功")

    def _office_pptx(self, pptx_path: str):
        # 尝试使用win32com连接到PowerPoint
        powerpoint = win32com.client.Dispatch("PowerPoint.Application")
        self.log.info('开始打开界面')
        # 创建PowerPoint应用实例 设置PowerPoint可见
        powerpoint.Visible = 1
        # 1 表示窗口模式 2 群屏模式
        powerpoint.WindowState = 2
        # 打开PPT文件
        presentation = powerpoint.Presentations.Open(pptx_path)
        # 设置幻灯片放映属性
        presentation.SlideShowSettings.ShowWithNarration = False
        presentation.SlideShowSettings.ShowWithAnimation = True
        self.is_showing = True
        # 运行幻灯片放映
        presentation.SlideShowSettings.Run()

        # 等待幻灯片放映结束
        while powerpoint.SlideShowWindows.Count > 0 and self.is_showing:
            time.sleep(1)  # 每秒检查一次,避免CPU占用过高
        if self.is_showing:
            self.is_showing = False
        self.log.info('Office 程序关闭')
        # 关闭PowerPoint应用程序
        powerpoint.Quit()

    def _wps_pptx(self, pptx_path: str):
        # 创建PowerPoint应用实例
        powerpoint = win32com.client.Dispatch("kwpp.Application")
        powerpoint.Visible = 1
        powerpoint.WindowState = 2
        # 打开PPT文件
        presentation = powerpoint.Presentations.Open(pptx_path)
        # 设置幻灯片放映属性
        presentation.SlideShowSettings.ShowWithNarration = False
        presentation.SlideShowSettings.ShowWithAnimation = True
        self.is_showing = True
        # 运行幻灯片放映
        presentation.SlideShowSettings.Run()
        # 等待幻灯片放映结束
        while powerpoint.SlideShowWindows.Count > 0 and self.is_showing:
            time.sleep(1)  # 每秒检查一次,避免CPU占用过高
        self.log.info('Wps 程序关闭')
        self.is_showing = False
        presentation.Close()  # 0表示不保存
        powerpoint.Quit()
	
	"""
	手动设置幻灯片播放关闭
	is_showing:bool 幻灯片是否播放,True 播放 False 关闭
	"""
    def embed_powerpoint_close(self):
        self.is_showing = False

之前找遍了国内外的论坛,都只有编辑PPT的没找到怎么播放的,虽然这个方法不太好,不如直接做到界面上然后在界面直接显示好,但是也算是一个解决办法吧。 好啦,今日分享到此为止吧。


网站公告

今日签到

点亮在社区的每一天
去签到