最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用pymupdf實現(xiàn)PDF內(nèi)容搜索并顯示功能

 更新時間:2023年08月15日 10:46:40   作者:winfredzhang  
在日常工作和學習中,我們可能需要查找和提取PDF文件中的特定內(nèi)容,本文將介紹如何使用pymupdf實現(xiàn)PDF內(nèi)容搜索并顯示的功能,需要的可以參考下

簡介

在日常工作和學習中,我們可能需要查找和提取PDF文件中的特定內(nèi)容。本文將介紹如何使用Python編程語言和wxPython圖形用戶界面庫來實現(xiàn)一個簡單的PDF內(nèi)容搜索工具。我們將使用PyMuPDF模塊來處理PDF文件,并結合wxPython構建一個用戶友好的界面。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 類。在該類的構造函數(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 列表中。最后,我們將匹配的結果顯示在顯示框中,如果沒有找到匹配的內(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果顯示在顯示框中,包括找到的頁面號和相應的文本內(nèi)容。

總結

本文介紹了如何使用Python和wxPython庫來實現(xiàn)一個簡單的PDF內(nèi)容搜索工具。通過結合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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 利用django model save方法對未更改的字段依然進行了保存

    利用django model save方法對未更改的字段依然進行了保存

    這篇文章主要介紹了利用django model save方法對未更改的字段依然進行了保存,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python跳出多重循環(huán)的方法示例

    Python跳出多重循環(huán)的方法示例

    這篇文章主要介紹了Python跳出多重循環(huán)的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Pycharm操作Git及GitHub的步驟詳解

    Pycharm操作Git及GitHub的步驟詳解

    這篇文章主要介紹了Pycharm操作Git及GitHub的步驟詳解,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 詳解PyQt5中textBrowser顯示print語句輸出的簡單方法

    詳解PyQt5中textBrowser顯示print語句輸出的簡單方法

    這篇文章主要介紹了詳解PyQt5中textBrowser顯示print語句輸出的簡單方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 如何對python版本設置版本控制

    如何對python版本設置版本控制

    update-alternatives可對軟件版本進行管理,通過修改軟鏈接指向完成版本切換,對python版本設置版本控制,包括設置版本代號、查看現(xiàn)在版本和切換版本
    2026-01-01
  • python實現(xiàn)簡易版計算器

    python實現(xiàn)簡易版計算器

    這篇文章主要為大家詳細介紹了python實現(xiàn)簡易版計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python3.5基礎之變量、數(shù)據(jù)結構、條件和循環(huán)語句、break與continue語句實例詳解

    Python3.5基礎之變量、數(shù)據(jù)結構、條件和循環(huán)語句、break與continue語句實例詳解

    這篇文章主要介紹了Python3.5基礎之變量、數(shù)據(jù)結構、條件和循環(huán)語句、break與continue語句,結合實例形式詳細分析Python3.5編程入門相關的變量、數(shù)據(jù)結構、常用條件與循環(huán)語句操作技巧及注意事項,需要的朋友可以參考下
    2019-04-04
  • python中的列表和元組實例詳解

    python中的列表和元組實例詳解

    在Python中序列是最基本的數(shù)據(jù)結構,它是一塊用于存放多個值得連續(xù)內(nèi)存空間,Python中內(nèi)置了5個常用的序列結構,分別是列表、元組、集合、字典和字符串,本文將詳細講解python中的列表和元組,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • python如何繪制疫情圖

    python如何繪制疫情圖

    這篇文章主要介紹了python如何繪制疫情圖,幫助大家理解和學習用python繪制圖像,感興趣的朋友可以了解下
    2020-09-09
  • python語言線程標準庫threading.local解讀總結

    python語言線程標準庫threading.local解讀總結

    在本篇文章里我們給各位整理了一篇關于python threading.local源碼解讀的相關文章知識點,有需要的朋友們可以學習下。
    2019-11-11

最新評論

日照市| 沂水县| 富阳市| 凤城市| 鸡东县| 屏东市| 温宿县| 肥东县| 定兴县| 忻城县| 大方县| 明星| 迁安市| 米易县| 图木舒克市| 济阳县| 广河县| 云林县| 津南区| 上杭县| 海口市| 郓城县| 枣庄市| 军事| 和林格尔县| 太原市| 麻城市| 海口市| 托里县| 岑溪市| 新密市| 防城港市| 石门县| 分宜县| 温宿县| 南宫市| 丹巴县| 宜丰县| 安陆市| 华坪县| 剑河县|