亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

簡(jiǎn)介

在日常工作和學(xué)習(xí)中,我們可能需要查找和提取PDF文件中的特定內(nèi)容。本文將介紹如何使用Python編程語(yǔ)言和wxPython圖形用戶界面庫(kù)來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的PDF內(nèi)容搜索工具。我們將使用PyMuPDF模塊來(lái)處理PDF文件,并結(jié)合wxPython構(gòu)建一個(gè)用戶友好的界面。C:\pythoncode\new\pdffindcontent.py

準(zhǔn)備工作

在開(kāi)始之前,請(qǐng)確保已經(jīng)安裝了Python和相應(yīng)的模塊??梢允褂胮ip來(lái)安裝wxPython和PyMuPDF模塊,具體安裝方法可以參考官方文檔。

創(chuàng)建GUI界面

我們首先需要?jiǎng)?chuàng)建一個(gè)GUI界面,以便用戶選擇要搜索的PDF文件并輸入要查找的內(nèi)容。我們使用wxPython庫(kù)來(lái)創(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)建了一個(gè)名為 PDFSearchFrame 的窗口類,它繼承自wxPython的 wx.Frame 類。在該類的構(gòu)造函數(shù)中,我們創(chuàng)建了界面的各個(gè)組件,包括選擇文件按鈕、輸入框和搜索按鈕以及顯示框。

PDF內(nèi)容搜索和提取

接下來(lái),我們需要在代碼中添加PDF內(nèi)容搜索和提取的功能。我們將使用PyMuPDF模塊來(lái)處理PDF文件。

# 導(dǎo)入所需模塊
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()

在上述代碼中,我們?cè)?on_search 方法中添加了PDF內(nèi)容搜索和提取的代碼。首先,我們使用 fitz.open 函數(shù)打開(kāi)選擇的PDF文件,并遍歷每一頁(yè)的文本內(nèi)容。然后,我們將文本內(nèi)容轉(zhuǎn)換為小寫,并檢查搜索文本是否在其中。如果找到合適的匹配項(xiàng),我們將它們存儲(chǔ)在 matches 列表中。最后,我們將匹配的結(jié)果顯示在顯示框中,如果沒(méi)有找到匹配的內(nèi)容,則顯示相應(yīng)的提示信息。

全部代碼

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()

運(yùn)行程序

完成以上步驟后,我們可以保存并運(yùn)行這個(gè)程序。一個(gè)具有搜索功能的PDF內(nèi)容搜索工具的窗口將會(huì)彈出。我們可以選擇要搜索的PDF文件,輸入要查找的內(nèi)容,并點(diǎn)擊搜索按鈕。程序?qū)?huì)將匹配的結(jié)果顯示在顯示框中,包括找到的頁(yè)面號(hào)和相應(yīng)的文本內(nèi)容。

總結(jié)

本文介紹了如何使用Python和wxPython庫(kù)來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的PDF內(nèi)容搜索工具。通過(guò)結(jié)合PyMuPDF模塊和wxPython圖形界面,我們能夠方便地選擇PDF文件,并在輸入框中輸入要查找的內(nèi)容。程序?qū)⑺阉髌ヅ涞膬?nèi)容,并將找到的頁(yè)面內(nèi)容提取到顯示框中。這個(gè)工具可以幫助我們快速查找和提取PDF文件中的特定內(nèi)容,提高工作效率。

到此這篇關(guān)于Python使用pymupdf實(shí)現(xiàn)PDF內(nèi)容搜索并顯示功能的文章就介紹到這了,更多相關(guān)Python pymupdf內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python爬蟲(chóng)框架Scrapy常用命令總結(jié)

    Python爬蟲(chóng)框架Scrapy常用命令總結(jié)

    這篇文章主要介紹了Python爬蟲(chóng)框架Scrapy常用命令,結(jié)合實(shí)例形式總結(jié)分析了Scrapy框架中常見(jiàn)的全局命令與項(xiàng)目命令功能、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • Python中RSA加解密與數(shù)字簽名技術(shù)的使用

    Python中RSA加解密與數(shù)字簽名技術(shù)的使用

    本文將詳細(xì)介紹 RSA 數(shù)字簽名的原理、實(shí)現(xiàn)步驟,以及如何通過(guò) Python 的 rsa 庫(kù)完成公鑰私鑰生成、數(shù)字簽名和認(rèn)證,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • python動(dòng)態(tài)文本進(jìn)度條的實(shí)例代碼

    python動(dòng)態(tài)文本進(jìn)度條的實(shí)例代碼

    這篇文章主要介紹了python動(dòng)態(tài)文本進(jìn)度條的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python中函數(shù)的定義及其調(diào)用

    Python中函數(shù)的定義及其調(diào)用

    這篇文章主要介紹了Python中函數(shù)定義及其調(diào)用,感興趣的朋友可以來(lái)了解一下
    2021-06-06
  • python使用pymongo操作mongo的完整步驟

    python使用pymongo操作mongo的完整步驟

    這篇文章主要給大家介紹了關(guān)于python使用pymongo操作mongo的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python爬蟲(chóng)實(shí)戰(zhàn)之最簡(jiǎn)單的網(wǎng)頁(yè)爬蟲(chóng)教程

    python爬蟲(chóng)實(shí)戰(zhàn)之最簡(jiǎn)單的網(wǎng)頁(yè)爬蟲(chóng)教程

    在我們?nèi)粘I暇W(wǎng)瀏覽網(wǎng)頁(yè)的時(shí)候,經(jīng)常會(huì)看到一些好看的圖片,我們就希望把這些圖片保存下載,或者用戶用來(lái)做桌面壁紙,或者用來(lái)做設(shè)計(jì)的素材。下面這篇文章就來(lái)給大家介紹了關(guān)于利用python實(shí)現(xiàn)最簡(jiǎn)單的網(wǎng)頁(yè)爬蟲(chóng)的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-08-08
  • Python中range函數(shù)的基本用法完全解讀

    Python中range函數(shù)的基本用法完全解讀

    range函數(shù)大多數(shù)時(shí)常出現(xiàn)在for循環(huán)中,在for循環(huán)中可做為索引使用,下面這篇文章主要給大家介紹了關(guān)于Python中range函數(shù)的基本用法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • Python運(yùn)行出現(xiàn)DeprecationWarning的問(wèn)題及解決

    Python運(yùn)行出現(xiàn)DeprecationWarning的問(wèn)題及解決

    這篇文章主要介紹了Python運(yùn)行出現(xiàn)DeprecationWarning的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • wxpython中Textctrl回車事件無(wú)效的解決方法

    wxpython中Textctrl回車事件無(wú)效的解決方法

    這篇文章主要介紹了wxpython中Textctrl回車事件無(wú)效的解決方法,較為詳細(xì)的分析了TextCtrl支持的事件類型,并給出了TextCtrl綁定回車事件的相應(yīng)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-07-07
  • Python屬性和內(nèi)建屬性實(shí)例解析

    Python屬性和內(nèi)建屬性實(shí)例解析

    這篇文章主要介紹了Python屬性和內(nèi)建屬性實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01

最新評(píng)論