Python GUI实现PDF转Word功能
作者:winfredzhang
在日常工作中,我们经常需要将 PDF 文档转换为 Word 文件。幸运的是,Python 提供了很多强大的库,帮助我们实现这一功能。今天,我将与大家分享如何使用 wxPython 创建一个简单的图形用户界面(GUI)应用程序,结合 pdf2docx 库,实现将 PDF 转换为 Word 文档的功能。
项目概述
这个小工具的主要目的是通过一个简单的窗口,让用户选择一个 PDF 文件,然后点击“转换”按钮,程序会将 PDF 文件转换为 Word 格式并保存在相同目录下。我们将使用 wxPython 来创建图形界面,pdf2docx 来进行实际的 PDF 转换。
全部代码
import wx import os from pdf2docx import Converter class PDFConverterFrame(wx.Frame): def __init__(self): super().__init__(parent=None, title='PDF to Word Converter', size=(500, 200)) self.pdf_path = None # Create main panel panel = wx.Panel(self) # Create vertical box sizer vbox = wx.BoxSizer(wx.VERTICAL) # Create file picker button self.file_picker = wx.FilePickerCtrl( panel, message="Choose a PDF file", wildcard="PDF files (*.pdf)|*.pdf", style=wx.FLP_USE_TEXTCTRL | wx.FLP_OPEN | wx.FLP_FILE_MUST_EXIST ) vbox.Add(self.file_picker, 0, wx.ALL | wx.EXPAND, 5) # Create status text self.status_text = wx.StaticText(panel, label="Select a PDF file to convert") vbox.Add(self.status_text, 0, wx.ALL | wx.CENTER, 5) # Create convert button convert_btn = wx.Button(panel, label='Convert to Word') convert_btn.Bind(wx.EVT_BUTTON, self.on_convert) vbox.Add(convert_btn, 0, wx.ALL | wx.CENTER, 5) # Set panel sizer panel.SetSizer(vbox) # Center window on screen self.Centre() def on_convert(self, event): pdf_path = self.file_picker.GetPath() if not pdf_path: wx.MessageBox('Please select a PDF file first!', 'Error', wx.OK | wx.ICON_ERROR) return if not os.path.exists(pdf_path): wx.MessageBox('Selected PDF file does not exist!', 'Error', wx.OK | wx.ICON_ERROR) return # Generate output path (same name, same directory, .docx extension) docx_path = os.path.splitext(pdf_path)[0] + '.docx' try: # Update status self.status_text.SetLabel("Converting... Please wait.") self.Layout() # Convert PDF to Word cv = Converter(pdf_path) cv.convert(docx_path) cv.close() # Show success message self.status_text.SetLabel("Conversion completed successfully!") wx.MessageBox( f'PDF has been converted to Word!\nSaved as: {docx_path}', 'Success', wx.OK | wx.ICON_INFORMATION ) except Exception as e: # Show error message self.status_text.SetLabel("Conversion failed!") wx.MessageBox( f'An error occurred during conversion:\n{str(e)}', 'Error', wx.OK | wx.ICON_ERROR ) if __name__ == '__main__': # Initialize wx application app = wx.App() # Create and show frame frame = PDFConverterFrame() frame.Show() # Start application main loop app.MainLoop()
项目要求
wxPython:用于创建图形界面。
pdf2docx:一个将 PDF 文件转换为 DOCX 文件的 Python 库。
操作系统文件管理功能:用于检查文件是否存在,并获取文件路径。
代码结构
我们来看看完整的代码,并逐行解析每个部分的功能。
import wx import os from pdf2docx import Converter class PDFConverterFrame(wx.Frame): def __init__(self): super().__init__(parent=None, title='PDF to Word Converter', size=(500, 200)) self.pdf_path = None # 创建主面板 panel = wx.Panel(self) # 创建垂直排列的布局 vbox = wx.BoxSizer(wx.VERTICAL) # 创建文件选择控件 self.file_picker = wx.FilePickerCtrl( panel, message="Choose a PDF file", wildcard="PDF files (*.pdf)|*.pdf", style=wx.FLP_USE_TEXTCTRL | wx.FLP_OPEN | wx.FLP_FILE_MUST_EXIST ) vbox.Add(self.file_picker, 0, wx.ALL | wx.EXPAND, 5) # 创建状态文本控件 self.status_text = wx.StaticText(panel, label="Select a PDF file to convert") vbox.Add(self.status_text, 0, wx.ALL | wx.CENTER, 5) # 创建转换按钮 convert_btn = wx.Button(panel, label='Convert to Word') convert_btn.Bind(wx.EVT_BUTTON, self.on_convert) vbox.Add(convert_btn, 0, wx.ALL | wx.CENTER, 5) # 设置面板布局 panel.SetSizer(vbox) # 窗口居中显示 self.Centre() def on_convert(self, event): # 获取选择的 PDF 文件路径 pdf_path = self.file_picker.GetPath() if not pdf_path: wx.MessageBox('Please select a PDF file first!', 'Error', wx.OK | wx.ICON_ERROR) return if not os.path.exists(pdf_path): wx.MessageBox('Selected PDF file does not exist!', 'Error', wx.OK | wx.ICON_ERROR) return # 生成输出路径(同名的 DOCX 文件) docx_path = os.path.splitext(pdf_path)[0] + '.docx' try: # 更新状态文本为正在转换 self.status_text.SetLabel("Converting... Please wait.") self.Layout() # 使用 pdf2docx 库进行转换 cv = Converter(pdf_path) cv.convert(docx_path) cv.close() # 转换成功后更新状态文本 self.status_text.SetLabel("Conversion completed successfully!") wx.MessageBox( f'PDF has been converted to Word!\nSaved as: {docx_path}', 'Success', wx.OK | wx.ICON_INFORMATION ) except Exception as e: # 如果发生错误,显示错误信息 self.status_text.SetLabel("Conversion failed!") wx.MessageBox( f'An error occurred during conversion:\n{str(e)}', 'Error', wx.OK | wx.ICON_ERROR ) if __name__ == '__main__': # 启动 wxPython 应用 app = wx.App() # 创建并显示窗口 frame = PDFConverterFrame() frame.Show() # 进入应用的主循环 app.MainLoop()
代码解析
1. 创建窗口和面板
我们首先通过 wx.Frame 创建了主窗口,wx.Panel 用作主窗口中的面板,所有控件都将放置在这个面板中。wx.BoxSizer(wx.VERTICAL) 用来管理控件的布局,确保它们在窗口中按垂直方向排列。
panel = wx.Panel(self) vbox = wx.BoxSizer(wx.VERTICAL)
2. 文件选择器
我们使用 wx.FilePickerCtrl 来允许用户选择 PDF 文件。通过设置 wildcard,我们限制了文件选择框只显示 .pdf 文件。
self.file_picker = wx.FilePickerCtrl( panel, message="Choose a PDF file", wildcard="PDF files (*.pdf)|*.pdf", style=wx.FLP_USE_TEXTCTRL | wx.FLP_OPEN | wx.FLP_FILE_MUST_EXIST )
3. 状态文本
状态文本用来实时反馈转换过程中的信息(如正在转换、转换成功或失败)。
self.status_text = wx.StaticText(panel, label="Select a PDF file to convert")
4. 转换按钮
点击按钮时触发 on_convert 方法,该方法首先检查是否选择了文件,然后检查文件是否存在,最后调用 pdf2docx 库进行转换。
convert_btn = wx.Button(panel, label='Convert to Word') convert_btn.Bind(wx.EVT_BUTTON, self.on_convert)
5. 文件转换
文件转换过程通过 pdf2docx.Converter 完成。转换过程中,程序会更新状态文本,提示用户正在进行转换,并在成功完成后显示结果信息。
cv = Converter(pdf_path) cv.convert(docx_path) cv.close()
6. 错误处理
如果转换过程中出现任何问题,程序会捕获异常并弹出错误提示。
except Exception as e: self.status_text.SetLabel("Conversion failed!") wx.MessageBox(f'An error occurred during conversion:\n{str(e)}', 'Error', wx.OK | wx.ICON_ERROR)
如何运行这个程序
确保你已经安装了所需的 Python 库:
pip install wxPython pdf2docx
将上述代码保存为 pdf_to_word_converter.py 文件。
在终端或命令行中运行该文件:
python pdf_to_word_converter.py
打开程序后,选择一个 PDF 文件,点击“Convert to Word”按钮,程序会自动将其转换为 Word 文件。
运行结果
以上就是Python GUI实现PDF转Word功能的详细内容,更多关于Python PDF转Word的资料请关注脚本之家其它相关文章!