diff --git a/requirements.txt b/requirements.txt index 5fba858..603ae2e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -39,3 +39,4 @@ Flask==3.1.0 annotated-types==0.7.0 blinker==1.9.0 langchain-google-genai==2.1.2 +pymupdf == 1.25.5 diff --git a/utils/parsers/account_parser.py b/utils/parsers/account_parser.py index 6d293c9..75fd1ea 100644 --- a/utils/parsers/account_parser.py +++ b/utils/parsers/account_parser.py @@ -1,22 +1,38 @@ import base64 -from pdf2image import convert_from_bytes -import pytesseract - +import pymupdf def process_account(account_b64: str) -> str: """ Traite l'account : - Décodage du PDF encodé en base64. - - Conversion de chaque page du PDF en image. - - Application de l'OCR sur chaque image pour extraire le texte. + - Extraction du texte et des champs de formulaire directement depuis le PDF. :param account_b64: Chaîne base64 représentant le PDF. - :return: Texte extrait de chaque page du PDF. + :return: Texte extrait de chaque page du PDF, incluant les champs du formulaire. """ + # Décodage du PDF en base64 pdf_bytes = base64.b64decode(account_b64) - images = convert_from_bytes(pdf_bytes) - pages_text = [] - for i, image in enumerate(images): - text = pytesseract.image_to_string(image, lang="eng") - pages_text.append(f"--- Page {i + 1} ---\n{text}") - return "\n".join(pages_text) \ No newline at end of file + + # Ouverture du PDF avec PyMuPDF + pdf_document = pymupdf.open(stream=pdf_bytes, filetype="pdf") + + # Traitement de chaque page + for i in range(len(pdf_document)): + page = pdf_document[i] + + # Extraction des champs de formulaire + fields = page.widgets() + form_fields_text = [] + + for field in fields: + field_name = field.field_name + field_value = field.field_value + form_fields_text.append(f"Field: {field_name}, Value: {field_value}") + + combined_text = "" + + if form_fields_text: + combined_text += "\n\nForm Fields:\n" + "\n".join(form_fields_text) + + pdf_document.close() + return "\n".join(combined_text) \ No newline at end of file