フォルダからpdfを選んで特定の文字に青枠を付けるpython

pip install pymupdf

import fitz  # PyMuPDF
import tkinter as tk
from tkinter import filedialog
import os

def mark_text_in_pdf(input_path, output_path, target_text):
    """
    PDF内の特定の文字列を検索し、青枠で囲んで保存する関数
    """
    try:
        doc = fitz.open(input_path)
        count = 0

        for page in doc:
            text_instances = page.search_for(target_text)
            for rect in text_instances:
                # 青枠を描画 (colorはRGB 0~1, widthは線の太さ)
                page.draw_rect(rect, color=(0, 0, 1), width=1.5)
                count += 1

        if count > 0:
            doc.save(output_path)
            print(f"\n成功! '{target_text}' は {count} 箇所見つかりました。")
            print(f"保存ファイル: {output_path}")
        else:
            print(f"\n結果: '{target_text}' は見つかりませんでした。")
        
        doc.close()

    except Exception as e:
        print(f"エラーが発生しました: {e}")

def select_pdf_file():
    """
    エクスプローラー(ファイル選択ダイアログ)を開く関数
    """
    # ルートウィンドウを作成し、すぐに非表示にする(余計な小窓を出さないため)
    root = tk.Tk()
    root.withdraw()

    # ファイル選択ダイアログを表示
    file_path = filedialog.askopenfilename(
        title="処理するPDFファイルを選択してください",
        filetypes=[("PDFファイル", "*.pdf")]
    )
    return file_path

# --- メイン処理 ---
if __name__ == "__main__":
    print("PDFファイルを選択してください...")
    
    # 1. エクスプローラーでファイルを選択
    input_file = select_pdf_file()

    if input_file:
        # 2. 検索したい言葉を入力
        print(f"選択されたファイル: {input_file}")
        search_word = input("検索して囲みたい文字列を入力してください: ")

        if search_word:
            # 出力ファイル名を自動生成 (例: data.pdf -> data_marked.pdf)
            base_name, ext = os.path.splitext(input_file)
            output_file = f"{base_name}_marked{ext}"

            # 3. 処理実行
            mark_text_in_pdf(input_file, output_file, search_word)
        else:
            print("検索文字が入力されなかったため、処理を中断しました。")
    else:
        print("ファイルが選択されませんでした。")

コメント

タイトルとURLをコピーしました