Python使用pymupdf實現(xiàn)PDF內(nèi)容搜索并顯示功能
簡介
在日常工作和學習中,我們可能需要查找和提取PDF文件中的特定內(nèi)容。本文將介紹如何使用Python編程語言和wxPython圖形用戶界面庫來實現(xiàn)一個簡單的PDF內(nèi)容搜索工具。我們將使用PyMuPDF模塊來處理PDF文件,并結(jié)合wxPython構(gòu)建一個用戶友好的界面。C:\pythoncode\new\pdffindcontent.py
準備工作
在開始之前,請確保已經(jīng)安裝了Python和相應的模塊??梢允褂胮ip來安裝wxPython和PyMuPDF模塊,具體安裝方法可以參考官方文檔。
創(chuàng)建GUI界面
我們首先需要創(chuàng)建一個GUI界面,以便用戶選擇要搜索的PDF文件并輸入要查找的內(nèi)容。我們使用wxPython庫來創(chuàng)建界面。
def __init__(self, parent, title): super(PDFSearchFrame, self).__init__(parent, title=title, size=(800, 600)) panel = wx.Panel(self) vbox = wx.BoxSizer(wx.VERTICAL) # 選擇文件按鈕 file_picker = wx.FilePickerCtrl(panel, style=wx.FLP_OPEN|wx.FLP_FILE_MUST_EXIST) file_picker.Bind(wx.EVT_FILEPICKER_CHANGED, self.on_file_selected) vbox.Add(file_picker, 0, wx.EXPAND|wx.ALL, 10) # 輸入框和按鈕 hbox = wx.BoxSizer(wx.HORIZONTAL) self.search_text = wx.TextCtrl(panel) search_button = wx.Button(panel, label='搜索') search_button.Bind(wx.EVT_BUTTON, self.on_search) hbox.Add(self.search_text, 1, wx.EXPAND|wx.ALL, 5) hbox.Add(search_button, 0, wx.ALL, 5) vbox.Add(hbox, 0, wx.EXPAND|wx.ALL, 10) # 顯示框 self.display_text = wx.TextCtrl(panel, style=wx.TE_MULTILINE|wx.TE_READONLY) vbox.Add(self.display_text, 1, wx.EXPAND|wx.ALL, 10) panel.SetSizer(vbox) self.Show()
在上述代碼中,我們創(chuàng)建了一個名為 PDFSearchFrame
的窗口類,它繼承自wxPython的 wx.Frame
類。在該類的構(gòu)造函數(shù)中,我們創(chuàng)建了界面的各個組件,包括選擇文件按鈕、輸入框和搜索按鈕以及顯示框。
PDF內(nèi)容搜索和提取
接下來,我們需要在代碼中添加PDF內(nèi)容搜索和提取的功能。我們將使用PyMuPDF模塊來處理PDF文件。
# 導入所需模塊 import wx import fitz def on_search(self, event): search_text = self.search_text.GetValue() if not search_text or not self.pdf_path: return doc = fitz.open(self.pdf_path) matches = [] for page in doc: text = page.get_text().lower() if search_text.lower() in text: matches.append((page.number, text)) self.display_text.SetValue('') if matches: for page_num, text in matches: self.display_text.AppendText(f"Page {page_num}:\n{text}\n\n") else: self.display_text.AppendText("未找到匹配的內(nèi)容。") doc.close()
在上述代碼中,我們在 on_search
方法中添加了PDF內(nèi)容搜索和提取的代碼。首先,我們使用 fitz.open
函數(shù)打開選擇的PDF文件,并遍歷每一頁的文本內(nèi)容。然后,我們將文本內(nèi)容轉(zhuǎn)換為小寫,并檢查搜索文本是否在其中。如果找到合適的匹配項,我們將它們存儲在 matches
列表中。最后,我們將匹配的結(jié)果顯示在顯示框中,如果沒有找到匹配的內(nèi)容,則顯示相應的提示信息。
全部代碼
import wx import fitz class PDFSearchFrame(wx.Frame): def __init__(self, parent, title): super(PDFSearchFrame, self).__init__(parent, title=title, size=(800, 600)) panel = wx.Panel(self) vbox = wx.BoxSizer(wx.VERTICAL) # 選擇文件按鈕 file_picker = wx.FilePickerCtrl(panel, style=wx.FLP_OPEN|wx.FLP_FILE_MUST_EXIST) file_picker.Bind(wx.EVT_FILEPICKER_CHANGED, self.on_file_selected) vbox.Add(file_picker, 0, wx.EXPAND|wx.ALL, 10) # 輸入框和按鈕 hbox = wx.BoxSizer(wx.HORIZONTAL) self.search_text = wx.TextCtrl(panel) search_button = wx.Button(panel, label='搜索') search_button.Bind(wx.EVT_BUTTON, self.on_search) hbox.Add(self.search_text, 1, wx.EXPAND|wx.ALL, 5) hbox.Add(search_button, 0, wx.ALL, 5) vbox.Add(hbox, 0, wx.EXPAND|wx.ALL, 10) # 顯示框 self.display_text = wx.TextCtrl(panel, style=wx.TE_MULTILINE|wx.TE_READONLY) vbox.Add(self.display_text, 1, wx.EXPAND|wx.ALL, 10) panel.SetSizer(vbox) self.Show() def on_file_selected(self, event): self.pdf_path = event.GetPath() def on_search(self, event): search_text = self.search_text.GetValue() if not search_text or not self.pdf_path: return doc = fitz.open(self.pdf_path) matches = [] for page in doc: text = page.get_text().lower() if search_text.lower() in text: matches.append((page.number, text)) self.display_text.SetValue('') if matches: for page_num, text in matches: self.display_text.AppendText(f"Page {page_num}:\n{text}\n\n") else: self.display_text.AppendText("未找到匹配的內(nèi)容。") doc.close() if __name__ == '__main__': app = wx.App() PDFSearchFrame(None, title="PDF搜索") app.MainLoop()
運行程序
完成以上步驟后,我們可以保存并運行這個程序。一個具有搜索功能的PDF內(nèi)容搜索工具的窗口將會彈出。我們可以選擇要搜索的PDF文件,輸入要查找的內(nèi)容,并點擊搜索按鈕。程序?qū)⑵ヅ涞慕Y(jié)果顯示在顯示框中,包括找到的頁面號和相應的文本內(nèi)容。
總結(jié)
本文介紹了如何使用Python和wxPython庫來實現(xiàn)一個簡單的PDF內(nèi)容搜索工具。通過結(jié)合PyMuPDF模塊和wxPython圖形界面,我們能夠方便地選擇PDF文件,并在輸入框中輸入要查找的內(nèi)容。程序?qū)⑺阉髌ヅ涞膬?nèi)容,并將找到的頁面內(nèi)容提取到顯示框中。這個工具可以幫助我們快速查找和提取PDF文件中的特定內(nèi)容,提高工作效率。
到此這篇關于Python使用pymupdf實現(xiàn)PDF內(nèi)容搜索并顯示功能的文章就介紹到這了,更多相關Python pymupdf內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python中RSA加解密與數(shù)字簽名技術(shù)的使用
本文將詳細介紹 RSA 數(shù)字簽名的原理、實現(xiàn)步驟,以及如何通過 Python 的 rsa 庫完成公鑰私鑰生成、數(shù)字簽名和認證,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03python爬蟲實戰(zhàn)之最簡單的網(wǎng)頁爬蟲教程
在我們?nèi)粘I暇W(wǎng)瀏覽網(wǎng)頁的時候,經(jīng)常會看到一些好看的圖片,我們就希望把這些圖片保存下載,或者用戶用來做桌面壁紙,或者用來做設計的素材。下面這篇文章就來給大家介紹了關于利用python實現(xiàn)最簡單的網(wǎng)頁爬蟲的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08Python運行出現(xiàn)DeprecationWarning的問題及解決
這篇文章主要介紹了Python運行出現(xiàn)DeprecationWarning的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07