Utilisez pymupdf pour réaliser la fonction de recherche et d'affichage de contenu PDF

Introduction :
Dans le travail et les études quotidiens, nous pouvons avoir besoin de rechercher et d'extraire du contenu spécifique dans des fichiers PDF. Cet article présentera comment implémenter un outil de recherche de contenu PDF simple à l'aide du langage de programmation Python et de la bibliothèque d'interface utilisateur graphique wxPython. Nous utiliserons le module PyMuPDF pour traiter les fichiers PDF et combinerons wxPython pour créer une interface conviviale.
C:\pythoncode\new\pdffindcontent.py
insérez la description de l'image ici

Préparation

Avant de commencer, assurez-vous d'avoir installé Python et les modules correspondants. Vous pouvez utiliser pip pour installer les modules wxPython et PyMuPDF. Pour les méthodes d'installation spécifiques, veuillez vous référer à la documentation officielle.

Créer une interface graphique

Nous devons d'abord créer une interface graphique permettant aux utilisateurs de sélectionner les fichiers PDF à rechercher et de saisir ce qu'ils recherchent. Nous utilisons la bibliothèque wxPython pour créer l'interface.

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

Dans le code ci-dessus, nous avons créé une PDFSearchFrameclasse de fenêtre appelée , qui hérite de la wx.Frameclasse wxPython. Dans le constructeur de cette classe, nous avons créé divers composants de l'interface, notamment le bouton de sélection de fichier, la zone de saisie et le bouton de recherche, ainsi que la zone d'affichage.

Recherche et extraction de contenu PDF

Ensuite, nous devons ajouter une fonctionnalité de recherche et d'extraction de contenu PDF au code. Nous utiliserons le module PyMuPDF pour traiter les fichiers 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("未找到匹配的内容。")

        doc.close()

Dans le code ci-dessus, nous on_searchavons ajouté le code de recherche et d'extraction de contenu PDF dans la méthode. Tout d’abord, nous utilisons fitz.openla fonction pour ouvrir le fichier PDF sélectionné et parcourir le contenu textuel de chaque page. Ensuite, nous convertissons le contenu du texte en minuscules et vérifions si le texte recherché s'y trouve. Si des correspondances appropriées sont trouvées, nous les stockons dans matchesune liste. Enfin, nous affichons les résultats correspondants dans la zone d'affichage, et si aucun contenu correspondant n'est trouvé, les informations d'invite correspondantes seront affichées.

tous les codes

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("未找到匹配的内容。")

        doc.close()

if __name__ == '__main__':
    app = wx.App()
    PDFSearchFrame(None, title="PDF搜索")
    app.MainLoop()

exécuter le programme

Après avoir terminé les étapes ci-dessus, nous pouvons enregistrer et exécuter le programme. Une fenêtre avec un outil de recherche de contenu PDF avec fonctionnalité de recherche apparaîtra. Nous pouvons sélectionner le fichier PDF à rechercher, saisir le contenu que nous voulons trouver et cliquer sur le bouton de recherche. Le programme affichera les résultats correspondants dans la zone d'affichage, y compris le numéro de page trouvé et le contenu du texte correspondant.

Résumé :
Cet article explique comment utiliser Python et la bibliothèque wxPython pour implémenter un outil de recherche de contenu PDF simple. En combinant le module PyMuPDF et l'interface graphique wxPython, nous pouvons facilement sélectionner le fichier PDF et saisir le contenu que nous voulons trouver dans la zone de saisie. Le programme recherchera le contenu correspondant et extraira le contenu de la page trouvée dans la zone d'affichage. Cet outil peut nous aider à trouver et extraire rapidement du contenu spécifique dans des fichiers PDF et à améliorer l'efficacité du travail.

Mots-clés : Python, wxPython, PDF, recherche de contenu, PyMuPDF

Je suppose que tu aimes

Origine blog.csdn.net/winniezhang/article/details/132291129
conseillé
Classement