# utils/pdf_utils.py """PDF 텍스트 좌표 추출 유틸""" import fitz # PyMuPDF from typing import List, Dict def get_text_coordinates(pdf_path: str, page_num: int, search_text: str) -> List[Dict]: """ PDF에서 특정 텍스트의 좌표를 찾아 하이라이트 정보 반환 Args: pdf_path: PDF 파일 경로 page_num: 페이지 번호 (1-based) search_text: 검색할 텍스트 Returns: 하이라이트 정보 리스트 """ try: doc = fitz.open(pdf_path) page = doc[page_num - 1] # 검색 텍스트 정리 (너무 길면 앞부분만) search_query = search_text[:100].strip() text_instances = page.search_for(search_query) annotations = [] for rect in text_instances: # streamlit-pdf-viewer 형식 - 형광펜 스타일 annotations.append({ "page": page_num, # 1-based index "x": rect.x0, "y": rect.y0, "width": rect.x1 - rect.x0, "height": rect.y1 - rect.y0, "color": "#FFFF00", # 밝은 노란색 "opacity": 0.4 # 40% 투명도 (형광펜 효과) }) doc.close() if annotations: print(f" ✅ {len(annotations)}개 하이라이트 생성 (페이지 {page_num})") else: print(f" ⚠️ 텍스트 '{search_query[:30]}...' 찾지 못함") return annotations except Exception as e: print(f"❌ 하이라이트 생성 오류: {e}") return [] if __name__ == "__main__": result = get_text_coordinates("test.pdf", 1, "sample text") print(f"하이라이트 개수: {len(result)}")