| """PDF document processor""" |
|
|
| import PyPDF2 |
| import logging |
| from typing import Dict, Any |
|
|
| logger = logging.getLogger(__name__) |
|
|
|
|
| class PDFProcessor: |
| """Processor for PDF documents""" |
|
|
| @staticmethod |
| def extract_text(file_path: str) -> str: |
| """Extract text from PDF file""" |
| text = [] |
| try: |
| with open(file_path, "rb") as pdf_file: |
| pdf_reader = PyPDF2.PdfReader(pdf_file) |
| num_pages = len(pdf_reader.pages) |
|
|
| for page_num in range(num_pages): |
| page = pdf_reader.pages[page_num] |
| page_text = page.extract_text() |
| text.append(page_text) |
|
|
| extracted_text = "\n".join(text) |
| logger.info(f"Extracted text from PDF: {num_pages} pages") |
| return extracted_text |
| except Exception as e: |
| logger.error(f"Failed to extract text from PDF: {e}") |
| raise |
|
|
| @staticmethod |
| def get_metadata(file_path: str) -> Dict[str, Any]: |
| """Extract metadata from PDF""" |
| try: |
| with open(file_path, "rb") as pdf_file: |
| pdf_reader = PyPDF2.PdfReader(pdf_file) |
| metadata = pdf_reader.metadata |
|
|
| return { |
| "num_pages": len(pdf_reader.pages), |
| "title": metadata.title if metadata else None, |
| "author": metadata.author if metadata else None, |
| } |
| except Exception as e: |
| logger.error(f"Failed to extract metadata from PDF: {e}") |
| return {"num_pages": 0} |
|
|