pymupdfを使用してPDFコンテンツの検索および表示機能を実現します

はじめに:
日々の仕事や勉強において、PDF ファイル内の特定のコンテンツを検索して抽出する必要がある場合があります。この記事では、Python プログラミング言語と wxPython グラフィカル ユーザー インターフェイス ライブラリを使用して、シンプルな PDF コンテンツ検索ツールを実装する方法を紹介します。PyMuPDF モジュールを使用して PDF ファイルを処理し、wxPython を組み合わせてユーザーフレンドリーなインターフェイスを構築します。
C:\pythoncode\new\pdffindcontent.py
ここに画像の説明を挿入

準備

開始する前に、Python と対応するモジュールがインストールされていることを確認してください。pip を使用して wxPython および PyMuPDF モジュールをインストールできます。具体的なインストール方法については、公式ドキュメントを参照してください。

GUIインターフェースを作成する

まず、ユーザーが検索する PDF ファイルを選択し、探している内容を入力するための GUI インターフェイスを作成する必要があります。wxPython ライブラリを使用してインターフェイスを作成します。

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

上記のコードでは、PDFSearchFramewxPython クラスを継承する というウィンドウ クラスを作成しましたwx.Frameこのクラスのコンストラクターでは、ファイル選択ボタン、入力ボックスと検索ボタン、表示ボックスなどのインターフェイスのさまざまなコンポーネントを作成しました。

PDF コンテンツの検索と抽出

次に、PDF コンテンツの検索および抽出機能をコードに追加する必要があります。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("未找到匹配的内容。")

        doc.close()

上記のコードでは、on_searchメソッドに PDF コンテンツの検索と抽出のコードを追加しました。まず、fitz.open関数を使用して選択した PDF ファイルを開き、各ページのテキスト コンテンツを繰り返し処理します。次に、テキストの内容を小文字に変換し、そこに検索テキストが含まれるかどうかを確認します。matches適切な一致が見つかった場合は、リストに保存します。最後に、表示ボックスに一致結果を表示します。一致するコンテンツが見つからない場合は、対応するプロンプト情報が表示されます。

すべてのコード

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

プログラムを実行する

上記の手順を完了したら、プログラムを保存して実行できます。検索機能を備えた PDF コンテンツ検索ツールのウィンドウがポップアップ表示されます。検索する PDF ファイルを選択し、検索したい内容を入力して、検索ボタンをクリックします。プログラムは、見つかったページ番号と対応するテキスト内容を含む一致結果を表示ボックスに表示します。

概要:
この記事では、Python と wxPython ライブラリを使用して簡単な PDF コンテンツ検索ツールを実装する方法を紹介します。PyMuPDF モジュールと wxPython グラフィカル インターフェイスを組み合わせることで、PDF ファイルを簡単に選択し、検索したいコンテンツを入力ボックスに入力できます。プログラムは一致するコンテンツを検索し、見つかったページ コンテンツを表示ボックスに抽出します。このツールは、PDF ファイル内の特定のコンテンツをすばやく検索して抽出し、作業効率を向上させるのに役立ちます。

キーワード: Python、wxPython、PDF、コンテンツ検索、PyMuPDF

おすすめ

転載: blog.csdn.net/winniezhang/article/details/132291129