from json import dumps import pdfplumber import openai from PyPDF2 import PdfReader from django.conf import settings openai.api_key = settings.OPENAI_API_KEY def convertPdfToJSON(file): eleve_id = 1 eleves = [] pdf = pdfplumber.open(file) for page in pdf.pages: curent_page = [] write = False eleve_found = False app_gen = "" current_eleve = {"eleve_id": "", "eleve": "", "app_generale": "", "appreciations": []} # lecture ligne par ligne lines = page.extract_text().split('\n') for i, line in enumerate(lines): # Attendre la ligne qui se termine par " Trimestre" if not write: if line.strip().endswith("Trimestre"): write = True continue # Enregistrer la ligne suivante (nom de l'élève) if write and not eleve_found: eleve_nom = line.strip() # Vérifier si l'élève n'est pas déjà dans la liste et que le bulletin ne tient pas sur plusieurs pages if not any(e["eleve"] == eleve_nom for e in eleves) and not line.strip().endswith("élèves)"): current_eleve["eleve_id"] = f"ELEVE{eleve_id}" current_eleve["eleve"] = eleve_nom eleve_id += 1 eleve_found = True else: # Si l'élève est déjà trouvé, on prend le dernier élève de la liste auquel on va ajouter les données de la nouvelle page current_eleve = eleves.pop() eleve_found = True continue # Si on a trouvé l'élève, on cherche l'appréciation générale if eleve_found and line.strip().startswith("Appréciation globale :"): app_gen = line.strip().split(":", 1)[-1].strip() continue # Si on a trouvé l'appréciation générale, on continue à la lire jusqu'à la ligne "Le Chef d'établissement" if app_gen: if not line.strip().startswith("Le Chef d'établissement"): app_gen += line.strip()+" " else: current_eleve["app_generale"] = app_gen continue # récupération des tableaux tables = page.extract_tables() tables = tables[0][2:] for table in tables: if table[1] != None and table[-1] != None: current_eleve["appreciations"].append({"matiere": table[1].split('\n')[0], "appreciation": table[-1]}) eleves.append(current_eleve) return eleves