import fitz # PyMuPDF import sys def extract_text_info(pdf_path): try: doc = fitz.open(pdf_path) except Exception as e: print(f"Ошибка при открытии файла: {e}") return for page_num in range(len(doc)): page = doc[page_num] blocks = page.get_text("dict")["blocks"] print(f"Page {page_num + 1}") for block in blocks: if "lines" in block: for line in block["lines"]: line_text = "" line_fonts = set() # Для хранения всех шрифтов в строке font_size = None # Координаты строки (берем из первого спана или обновляем) bbox = None for span in line["spans"]: line_text += span["text"] line_fonts.add(span["font"]) # Шрифт font_size = span["size"] # Размер шрифта # Координаты спана (x0, y0, x1, y1) span_bbox = span["bbox"] if bbox is None: bbox = span_bbox else: # Обновляем границы для всей строки bbox = ( min(bbox[0], span_bbox[0]), # x0 min(bbox[1], span_bbox[1]), # y0 max(bbox[2], span_bbox[2]), # x1 max(bbox[3], span_bbox[3]) # y1 ) if line_text.strip(): print(f"Line: {line_text.strip()} | Fonts: {', '.join(line_fonts)} | Size: {font_size} | BBox: ({bbox[0]:.2f}, {bbox[1]:.2f}, {bbox[2]:.2f}, {bbox[3]:.2f})") doc.close() if len(sys.argv) != 2: print("Использование: python3 pdf_fonts.py <путь_к_pdf>") sys.exit(1) pdf_path = sys.argv[1] extract_text_info(pdf_path)