# Bulk PDF Processor

This utility scans a directory for PDF files and processes them (e.g., extracts text) using a progress bar to track status.

**Modules Used:**
*   [[programming/python/modules/argparse-module|argparse]]: To handle input/output directories.
*   [[programming/python/modules/pathlib-module|pathlib]]: To find files recursively.
*   [[programming/python/modules/pypdf-module|pypdf]]: To read the PDF content.
*   [[programming/python/modules/tqdm-module|tqdm]]: To show a progress bar.

## The Code

Save this as `pdf_tool.py`.

```python
import argparse
from pathlib import Path
from pypdf import PdfReader
from tqdm import tqdm

def process_pdfs(input_dir, keyword):
    # 1. Find all PDF files
    path = Path(input_dir)
    files = list(path.rglob("*.pdf"))
    
    print(f"Found {len(files)} PDF files in {input_dir}")
    
    results = []

    # 2. Iterate with Progress Bar
    for pdf_file in tqdm(files, desc="Processing PDFs", unit="file"):
        try:
            reader = PdfReader(pdf_file)
            
            # Check first page for keyword
            if len(reader.pages) > 0:
                text = reader.pages[0].extract_text()
                if keyword.lower() in text.lower():
                    results.append(pdf_file.name)
                    
        except Exception as e:
            # Don't crash the loop on a bad file, just print error
            tqdm.write(f"Error reading {pdf_file.name}: {e}")

    # 3. Report Results
    print("\n" + "="*30)
    print(f"Files containing '{keyword}':")
    for res in results:
        print(f"- {res}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Bulk PDF Scanner")
    parser.add_argument("directory", help="Directory to scan")
    parser.add_argument("--search", required=True, help="Keyword to search for in first page")
    
    args = parser.parse_args()
    
    process_pdfs(args.directory, args.search)
```

## Usage

```bash
python pdf_tool.py ./documents --search "Invoice"
```

[[programming/python/python]]