使用Python开发PPT文本提取工具

在日常工作中,我们经常需要从PowerPoint文档中提取文本内容进行处理。本文将详细介绍如何使用Python开发一个带图形界面的PPT文本提取工具,该工具可以轻松地从PPTX文件中提取所有文本内容,并按页码显示。

C:\pythoncode\new\GetContentOFPPT.py

全部代码

python 复制代码
import wx
import os
from pptx import Presentation

class PPTExtractFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='PPT文字提取工具', size=(800, 600))
        self.InitUI()
        
    def InitUI(self):
        # 创建面板
        panel = wx.Panel(self)
        
        # 创建垂直布局
        vbox = wx.BoxSizer(wx.VERTICAL)
        
        # 创建按钮
        self.select_btn = wx.Button(panel, label='选择PPT文件')
        self.select_btn.Bind(wx.EVT_BUTTON, self.OnSelect)
        vbox.Add(self.select_btn, 0, wx.ALL | wx.CENTER, 5)
        
        # 创建文本框
        self.memo = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY)
        vbox.Add(self.memo, 1, wx.ALL | wx.EXPAND, 5)
        
        panel.SetSizer(vbox)
        
    def OnSelect(self, event):
        # 创建文件选择对话框
        with wx.FileDialog(self, "选择PPTX文件", 
                          wildcard="PowerPoint files (*.pptx)|*.pptx",
                          style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:
            
            if fileDialog.ShowModal() == wx.ID_CANCEL:
                return
            
            # 获取选择的文件路径
            pathname = fileDialog.GetPath()
            
            try:
                self.ExtractText(pathname)
            except Exception as e:
                wx.MessageBox(f'错误:{str(e)}', '错误',
                            wx.OK | wx.ICON_ERROR)
    
    def ExtractText(self, filepath):
        # 清空文本框
        self.memo.Clear()
        
        # 打开PPT文件
        prs = Presentation(filepath)
        
        # 遍历所有幻灯片
        for idx, slide in enumerate(prs.slides, 1):
            text_content = []
            
            # 提取当前幻灯片中的所有文本
            for shape in slide.shapes:
                if hasattr(shape, "text"):
                    if shape.text.strip():  # 只添加非空文本
                        text_content.append(shape.text.strip())
            
            # 如果该页有文本,则添加到memo中
            if text_content:
                page_text = f"第{idx}页内容:\n" + "\n".join(text_content) + "\n\n"
                self.memo.AppendText(page_text)

def main():
    app = wx.App()
    frame = PPTExtractFrame()
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()

技术栈介绍

本项目使用了以下技术:

  1. wxPython - 用于创建图形用户界面
  2. python-pptx - 用于处理PowerPoint文档
  3. Python内置的os模块 - 用于文件路径处理

整体架构设计

程序采用面向对象的设计方法,主要包含以下组件:

  1. 主窗口类(PPTExtractFrame)
  2. 用户界面初始化方法(InitUI)
  3. 文件选择处理方法(OnSelect)
  4. 文本提取核心方法(ExtractText)

详细代码解析

1. 导入必要的模块

python 复制代码
import wx
import os
from pptx import Presentation

这三个import语句导入了程序所需的核心模块:

  • wx:wxPython的主模块,提供GUI相关功能
  • os:处理文件路径
  • pptx.Presentation:用于读取和处理PPTX文件

2. 主窗口类的设计

python 复制代码
class PPTExtractFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='PPT文字提取工具', size=(800, 600))
        self.InitUI()

这是程序的主窗口类,继承自wx.Frame。构造函数中:

  • 调用父类构造函数,设置窗口标题和大小
  • 调用InitUI方法初始化界面元素

3. 用户界面初始化

python 复制代码
def InitUI(self):
    panel = wx.Panel(self)
    vbox = wx.BoxSizer(wx.VERTICAL)
    
    self.select_btn = wx.Button(panel, label='选择PPT文件')
    self.select_btn.Bind(wx.EVT_BUTTON, self.OnSelect)
    vbox.Add(self.select_btn, 0, wx.ALL | wx.CENTER, 5)
    
    self.memo = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY)
    vbox.Add(self.memo, 1, wx.ALL | wx.EXPAND, 5)
    
    panel.SetSizer(vbox)

InitUI方法创建了程序的界面布局:

  • 创建一个面板(Panel)作为主容器
  • 使用垂直布局管理器(BoxSizer)
  • 添加"选择PPT文件"按钮,并绑定点击事件
  • 添加多行文本控件用于显示提取的文本
  • 设置布局器到面板

4. 文件选择对话框实现

python 复制代码
def OnSelect(self, event):
    with wx.FileDialog(self, "选择PPTX文件", 
                      wildcard="PowerPoint files (*.pptx)|*.pptx",
                      style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:
        
        if fileDialog.ShowModal() == wx.ID_CANCEL:
            return
        
        pathname = fileDialog.GetPath()
        
        try:
            self.ExtractText(pathname)
        except Exception as e:
            wx.MessageBox(f'错误:{str(e)}', '错误',
                        wx.OK | wx.ICON_ERROR)

OnSelect方法处理文件选择操作:

  • 创建文件选择对话框,限制文件类型为.pptx
  • 使用Python的with语句确保对话框资源正确释放
  • 获取选择的文件路径并调用提取方法
  • 使用try-except处理可能的错误

5. 核心文本提取功能

python 复制代码
def ExtractText(self, filepath):
    self.memo.Clear()
    
    prs = Presentation(filepath)
    
    for idx, slide in enumerate(prs.slides, 1):
        text_content = []
        
        for shape in slide.shapes:
            if hasattr(shape, "text"):
                if shape.text.strip():
                    text_content.append(shape.text.strip())
        
        if text_content:
            page_text = f"第{idx}页内容:\n" + "\n".join(text_content) + "\n\n"
            self.memo.AppendText(page_text)

ExtractText方法是程序的核心功能:

  • 清空现有文本显示
  • 使用python-pptx打开PPT文件
  • 遍历每一页幻灯片
  • 提取每个形状中的文本内容
  • 按页码组织并显示文本

运行结果


6. 程序入口

python 复制代码
def main():
    app = wx.App()
    frame = PPTExtractFrame()
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()

程序入口部分:

  • 创建wx应用程序实例
  • 创建并显示主窗口
  • 启动事件循环
相关推荐
Major_pro1 小时前
脚本工具:PYTHON
java·数据库·python
积跬步,慕至千里1 小时前
Windows环境本地配置pyspark环境详细教程
windows·python·pyspark
深图智能1 小时前
PyTorch使用教程(11)-cuda的使用方法
人工智能·pytorch·python·深度学习
唯余木叶下弦声2 小时前
Python人脸识别库DeepFace使用教程及源码解析
开发语言·人工智能·python
不爱吃萝卜的嘤嘤怪2 小时前
非局域网win实现远程桌面控制ubuntu
python
bohu832 小时前
亚博microros小车-原生ubuntu支持系列:1 键盘控制
python·ubuntu·ros2·话题通信·microros·亚博
机智可爱嚎嚎2 小时前
Module 模块
开发语言·python·学习·模块
北京-宏哥3 小时前
PC端自动化测试实战教程-1-pywinauto 环境搭建(详细教程)
windows·python·测试工具·pycharm·自动化
五味香3 小时前
Java学习,List移动元素
android·java·开发语言·python·学习·kotlin·list
深图智能3 小时前
PyTorch使用教程(15)-常用开源数据集简介
人工智能·pytorch·python·深度学习