当前位置: 首页 > article >正文

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

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

全部代码

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. 导入必要的模块

import wx
import os
from pptx import Presentation

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

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

2. 主窗口类的设计

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

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

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

3. 用户界面初始化

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. 文件选择对话框实现

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. 核心文本提取功能

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. 程序入口

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

if __name__ == '__main__':
    main()

程序入口部分:

  • 创建wx应用程序实例
  • 创建并显示主窗口
  • 启动事件循环

http://www.kler.cn/a/510594.html

相关文章:

  • Android SystemUI——CarSystemBar视图解析(十一)
  • Typora + PowerShell 在终端打开文件
  • C语言编程笔记:文件处理的艺术
  • [计算机网络]一. 计算机网络概论第一部分
  • C++速览之智能指针
  • Nginx三种不同类型的虚拟主机(基于域名、IP 和端口)
  • Spring的Bean详解=Bean别名+作用范围+使用场景
  • 4.Proto 3 语法详解
  • opencv笔记2
  • htmlcssJavaScript网页开发:年会手机号抽奖案例
  • ANSYS FLUENT学习笔记(八)-实战案例-网格划分
  • 使用 CFX 中的标量传输方程对染料冲洗数值建模:以主动脉弓血流为例
  • python轻量级框架-flask
  • 【AI论文】生成式视频模型是否通过观看视频学习物理原理?
  • 【Linux】Linux入门(2)常见指令
  • Jupter安装
  • vscode的字体图标库-icomoon
  • CSS 动画相关属性
  • 【分类】【损失函数】处理类别不平衡:CEFL 和 CEFL2 损失函数的实现与应用
  • 准备面试3个月,加油!
  • vue3+elementPlus之后台管理系统(从0到1)(day2)
  • 常用的UI自动化测试框架是哪些?有什么优缺点?如何选择?
  • 20250118 PPT画的论文插图如何导出高分辨率图片:修改电脑注册表
  • LeetCode:2266. 统计打字方案数(DP Java)
  • Swift语言的物联网
  • Unity编辑器缩放设置