from PyPDF2 import PdfReader import re def extract_names_from_pdf(pdf_path): try: reader = PdfReader(pdf_path) fields = reader.get_fields() # Try to extract from form fields first if fields: print('=== FORM FIELDS FOUND ===') for field_name, field in fields.items(): print(f'{field_name}: {field.value}') # Try to map to expected fields first_name = fields.get('First Name', fields.get('first_name', fields.get('FirstName'))) last_name = fields.get('Last Name', fields.get('last_name', fields.get('LastName'))) grade = fields.get('Grade', fields.get('grade')) school = fields.get('School', fields.get('school')) gender = fields.get('Gender', fields.get('gender')) extracted_data = {} if first_name and first_name.value: extracted_data['first_name'] = first_name.value.strip() if last_name and last_name.value: extracted_data['last_name'] = last_name.value.strip() if grade and grade.value: extracted_data['grade'] = grade.value.strip() if school and school.value: extracted_data['school'] = school.value.strip() if gender and gender.value: extracted_data['gender'] = gender.value.strip() if extracted_data and all(extracted_data.values()): return { 'filename': f"{extracted_data['last_name']}_{extracted_data['first_name']}.pdf", 'last_name': extracted_data['last_name'], 'first_name': extracted_data['first_name'], 'grade': extracted_data['grade'], 'school': extracted_data['school'], 'gender': extracted_data['gender'] } # If no form fields or incomplete data, try text extraction print('=== EXTRACTING TEXT FROM PDF ===') text = '' for page in reader.pages: text += page.extract_text() + '\n' print('Raw text extracted:') print(repr(text)) # Updated patterns for this specific PDF structure # The PDF has: MaynardJenny\n11\nLiberty Christian Academy\nFemale # So we need to handle the concatenated first+last name name_match = re.search(r'(Maynard)(Jenny)', text) if name_match: first_name = name_match.group(1) last_name = name_match.group(2) else: # Fallback to individual patterns first_name_match = re.search(r'Maynard', text) first_name = first_name_match.group() if first_name_match else "" last_name_match = re.search(r'Jenny', text) last_name = last_name_match.group() if last_name_match else "" grade_match = re.search(r'11', text) grade = grade_match.group() if grade_match else "" school_match = re.search(r'Liberty Christian Academy', text) school = school_match.group() if school_match else "" gender_match = re.search(r'Female', text) gender = gender_match.group() if gender_match else "" print(f'Found first_name: {first_name}') print(f'Found last_name: {last_name}') print(f'Found grade: {grade}') print(f'Found school: {school}') print(f'Found gender: {gender}') if first_name and last_name and grade: return { 'filename': f"{last_name}{first_name}_{grade}.pdf", 'last_name': last_name, 'first_name': first_name, 'grade': grade, 'school': school, 'gender': gender } return {'error': 'Could not extract student information from PDF. No form fields found and text extraction failed.'} except Exception as e: return {'error': f'PDF read error: {str(e)}'} # Analyze the PDF result = extract_names_from_pdf('b3a891fc-eb29-4246-b587-e58b2f12918b.pdf') print('\n=== FINAL RESULT ===') print(result)