import pathlib import re import sys from pypdf import PdfReader def compact(text: str) -> str: return re.sub(r"\s+", " ", text or "").strip() def main() -> None: if len(sys.argv) < 3: raise SystemExit("usage: search_pdf_keywords.py [keyword...]") pdf_path = pathlib.Path(sys.argv[1]) keywords = sys.argv[2:] reader = PdfReader(str(pdf_path)) print(f"PDF: {pdf_path}") print(f"PAGES: {len(reader.pages)}") for page_index, page in enumerate(reader.pages, start=1): text = compact(page.extract_text() or "") if not text: continue for keyword in keywords: if keyword in text: pos = text.find(keyword) start = max(0, pos - 160) end = min(len(text), pos + len(keyword) + 260) print(f"\nPAGE {page_index} KEYWORD {keyword}") print(text[start:end]) if __name__ == "__main__": if hasattr(sys.stdout, "reconfigure"): sys.stdout.reconfigure(encoding="utf-8") main()