IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Fichier PDF et calcul de score


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Chargé de référencement
    Inscrit en
    Octobre 2024
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Octobre 2024
    Messages : 12
    Par défaut Fichier PDF et calcul de score
    Bonjour,
    On me demande de trouver une solution à ce problème et j’ai beau chercher sur internet je ne comprends pas et je ne trouve pas (je suis débutante en python).
    Mon manager rempli des fichiers (fichiers pdf remplissables sur l’ordinateur) et ensuite, en fonction des cases qui sont cochées, elle calcule un nombre de point.
    Comment faire pour créer un programme qui puisse faire ce calcul automatiquement ?

    Merci.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Hello,

    Tout dépend comment ce PDF a été créé, faut faire des tests... Avec le module PyPDF2, vous avez grâce à /Annots la possibilité de rechercher et avoir la valeur (coché ou pas coché) de vos cases.

    Vous avez des exemples sur internet, il n'y a plus qu'à se créer des petits programmes de tests pour vérifier ce que ça peut donner sur vos fichiers.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par Elsa_ano Voir le message
    Comment faire pour créer un programme qui puisse faire ce calcul automatiquement ?
    Il faut déjà savoir ce qu'on va lui faire faire... d'autant qu'on part d'un existant à modifier qui n'a peut être pas été écrit avec python et que votre manager pourrait utiliser un tableur qui sait déjà faire cela sans avoir à trop programmer.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 540
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 540
    Par défaut
    Le nombre de points figure aussi dans le PDF ?
    Qui a créé les PDF? si c'est la société, le calcul est peut-être implantable dans le pdf via Acrobat (exemple https://helpx.adobe.com/fr/sign/usin...ed-fields.html)
    si c'est en dehors, oublie ma réponse.

  5. #5
    Membre habitué
    Femme Profil pro
    Chargé de référencement
    Inscrit en
    Octobre 2024
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Octobre 2024
    Messages : 12
    Par défaut
    Bonjour,
    Effectivement, c’est l’entreprise qui a créé le fichier PDF et il n’est pas prévu d’en changer le format.
    J’ai demandé à avoir une version plus poussé d’Adobe (car j’ai vu qu’il y avait une fonctionnalité JavaScript inclus) mais cela m’a été refusé.
    C’est un fichier qui fait une dizaine de pages avec beaucoup de cases à cocher et chaque cases apportent un certain nombre de points. Le but est d’additionner tous ces points pour connaître le score total de la personne.
    Mon manager le rempli sur PDF puis le calcul à la main et ça lui prend un temps fou.
    Je pense avoir Adobe Acrobat sign sur mon Pc (car je peux remplir, cocher des cases ou signer des documents), mais je ne crois pas avoir la version la plus avancée

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 212
    Par défaut
    Hello,
    voici ce que tu peux essayer en python avec pypdf (disponible sur pypi donc avec pip)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from pypdf import PdfReader
    reader = PdfReader('d:/temp/s6201_remplie.pdf')
    fields  = reader.get_fields()
    # Iterate over the fields and print their names and values
    for field_name, field_value in fields.items():
         print(f"{field_name}: {field_value}")
    En remplaçant mon fichier pdf (qui se trouve ici) par le tien.
    Si il n'y a rien qui s'affiche , c'est pas bon signe. Sinon il faut repérer les cases à cocher et faire un traitement suivant qu'elle est cochée ( /V (value) à /Oui ou /Non ou /Off)
    voici par exemple une ligne de ce qui est affichée avec mon fichier pdf et qui correspond à une case à cocher :
    gestion AT MP: {'/T': 'gestion AT MP', '/FT': '/Btn', '/V': '/Oui',

    Nom : pdfRempli.png
Affichages : 2161
Taille : 21,2 Ko

    [EDIT] Voici un exemple de traitement à partir d'un PDF interactif (en pièce jointe) que j'ai créé à partir de LibreOffice :
    Nom : pdfRempliJP.png
Affichages : 2153
Taille : 33,5 Ko

    Le code de traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    from pypdf import PdfReader
    #reader = PdfReader('d:/temp/cerfa_13750-07.pdf')
    #reader = PdfReader('d:/temp/s6201_remplie.pdf')
    reader = PdfReader('d:/temp/Questions.pdf')
    fields = fields = reader.get_fields()
    score = 0
    for field_name, field_value in fields.items():
         #print(f"{field_name}: {field_value}")
         match field_name:
             case "Langage":
                 match field_value.get('/V'):
                     case '/1':
                         score += 1
                     case '/2':
                         score += 2
                     case '/3':
                         score += 3
                     case '/4':
                         score += 4
                     case '/5':
                         score += 5
             case "Case1":
                 if field_value.get('/V') == "/Yes":
                     score += 1
             case "Case2":
                 if field_value.get('/V') == "/Yes":
                     score += 2
             case "Case3":
                 if field_value.get('/V') == "/Yes":
                     score += 3
    print('score : ' + str(score))
    Attention match n'existe que depuis python 3.10

    Ami calmant, J.P
    Images attachées Images attachées

  7. #7
    Membre habitué
    Femme Profil pro
    Chargé de référencement
    Inscrit en
    Octobre 2024
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Octobre 2024
    Messages : 12
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Hello,
    voici ce que tu peux essayer en python avec pypdf (disponible sur pypi donc avec pip)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from pypdf import PdfReader
    reader = PdfReader('d:/temp/s6201_remplie.pdf')
    fields  = reader.get_fields()
    # Iterate over the fields and print their names and values
    for field_name, field_value in fields.items():
         print(f"{field_name}: {field_value}")
    En remplaçant mon fichier pdf (qui se trouve ici) par le tien.
    Si il n'y a rien qui s'affiche , c'est pas bon signe. Sinon il faut repérer les cases à cocher et faire un traitement suivant qu'elle est cochée ( /V (value) à /Oui ou /Non ou /Off)
    voici par exemple une ligne de ce qui est affichée avec mon fichier pdf et qui correspond à une case à cocher :
    gestion AT MP: {'/T': 'gestion AT MP', '/FT': '/Btn', '/V': '/Oui',

    Nom : pdfRempli.png
Affichages : 2161
Taille : 21,2 Ko

    [EDIT] Voici un exemple de traitement à partir d'un PDF interactif (en pièce jointe) que j'ai créé à partir de LibreOffice :
    Nom : pdfRempliJP.png
Affichages : 2153
Taille : 33,5 Ko

    Le code de traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    from pypdf import PdfReader
    #reader = PdfReader('d:/temp/cerfa_13750-07.pdf')
    #reader = PdfReader('d:/temp/s6201_remplie.pdf')
    reader = PdfReader('d:/temp/Questions.pdf')
    fields = fields = reader.get_fields()
    score = 0
    for field_name, field_value in fields.items():
         #print(f"{field_name}: {field_value}")
         match field_name:
             case "Langage":
                 match field_value.get('/V'):
                     case '/1':
                         score += 1
                     case '/2':
                         score += 2
                     case '/3':
                         score += 3
                     case '/4':
                         score += 4
                     case '/5':
                         score += 5
             case "Case1":
                 if field_value.get('/V') == "/Yes":
                     score += 1
             case "Case2":
                 if field_value.get('/V') == "/Yes":
                     score += 2
             case "Case3":
                 if field_value.get('/V') == "/Yes":
                     score += 3
    print('score : ' + str(score))
    Attention match n'existe que depuis python 3.10

    Ami calmant, J.P

    Bonjour, merci pour votre réponse. J'ai pu avancer dans le code et utiliser PyPDF2. Le problème c'est que j'ai plusieurs plusieurs questions avec 3 choix (Oui, Non et Je ne sais pas). Pour pouvoir cocher une case (donc soit oui, soit non, soit je ne sais pas), la personne qui a crée le PDF a utiliser le même nom pour le champs.
    En utilisant Adobe et en cliquant sur "Préparer le formulaire", j'ai accès aux noms des champs. Et par exemple pour cette question, le nom de champs est réponse1#0, réponse1#1 et réponse#2.

    J'ai écris ce code et il récupère bien le nom des champs sauf ceux qui ont le même nom, comme expliqué précédemment :

    import PyPDF2

    # Première fonction pour extraire les réponses, y compris les états des checkbox


    def normalize_field_name(field_name):
    """Nettoie et normalise le nom du champ pour correspondre aux clés du dictionnaire."""
    if field_name:
    # Enlever les suffixes comme #0, #1, etc.
    return field_name.split('#')[0].strip()
    return None


    def extract_form_answers_with_checkboxes(pdf_path):
    form_data = {}

    # Ouvre le fichier PDF en mode binaire
    with open(pdf_path, 'rb') as pdf_file:
    reader = PyPDF2.PdfReader(pdf_file)
    fields = reader.get_form_text_fields()

    if fields:
    for field_name, field_value in fields.items():
    # Store regular text fields
    form_data[field_name] = field_value

    # Check for additional fields like checkboxes
    for page in reader.pages:
    if '/Annots' in page:
    for annot in page['/Annots']:
    field = annot.get_object()
    field_type = field.get('/FT')
    field_name = field.get('/T')
    field_value = field.get('/V')

    # Check if the field is a checkbox
    if field_type == '/Btn':
    # If field_value is not None, the checkbox is checked
    checkbox_state = "checked" if field_value else "Unchecked"
    form_data[field_name] = checkbox_state

    return form_data


    # Path to your PDF file

    pdf_file_path = "....pdf"

    # Extract and display the form answers, including checkbox states
    form_answers = extract_form_answers_with_checkboxes(pdf_file_path)
    if form_answers:
    for field, answer in form_answers.items():
    print(f"{field}: {answer}")
    else:
    print("Aucun champ de formulaire trouvé ou quelque chose s'est mal passé.")


    L'outpout :


    Original Field Name: None, Normalized Field Name: None
    Nom de champ normalis� invalide.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 540
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 540
    Par défaut
    Citation Envoyé par Elsa_ano Voir le message
    Bonjour,
    Effectivement, c’est l’entreprise qui a créé le fichier PDF et il n’est pas prévu d’en changer le format.
    J’ai demandé à avoir une version plus poussé d’Adobe (car j’ai vu qu’il y avait une fonctionnalité JavaScript inclus) mais cela m’a été refusé.
    C’est un fichier qui fait une dizaine de pages avec beaucoup de cases à cocher et chaque cases apportent un certain nombre de points. Le but est d’additionner tous ces points pour connaître le score total de la personne.
    Mon manager le rempli sur PDF puis le calcul à la main et ça lui prend un temps fou.
    Je pense avoir Adobe Acrobat sign sur mon Pc (car je peux remplir, cocher des cases ou signer des documents), mais je ne crois pas avoir la version la plus avancée
    Acrobat Sign, c'est essentiellement pour de la signature électronique légale (certifiée).
    Avec Acrobat Reader, on peut remplir un formulaire, cochez des cases, etc et ajouter une signature "manuelle" (non certifiée).
    Mais effectivement avec un Acrobat Pro (éditeur), il aurait été, je pense, possible de faire la fonctionnalité de compte des points (pas forcément avec Javascript, mais aussi avec es ActionScript).
    Ces 2 produits sont des produits payants sous licence.

    Si l'entreprise dont tu parles est celle dans laquelle tu travailles, je pense qu'il faudrait se rapprocher de la personne qui a créé ce fichier et voir avec lui comment et si c'est réalisable de réaliser le compteur de point avec le logiciel qu'il utilise pour générer ce pdf.

  9. #9
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonsoir,

    Citation Envoyé par Elsa_ano
    J'ai écris ce code
    Soyons honnête, plutôt copier coller

    Si vous aviez un temps soit peu travailler en python, vous sauriez que le présenter sans indentation, c'est écrire un code totalement illisible et donc inutile.

    Et comme nous ne pouvons pas tester de notre côté, c'est à vous d'essayer de comprendre ce qui ne va pas... car le plus simple pour debug un code quelque-soit le langage, c'est reproduire l'erreur.

  10. #10
    Membre habitué
    Femme Profil pro
    Chargé de référencement
    Inscrit en
    Octobre 2024
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Octobre 2024
    Messages : 12
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Bonsoir,



    Soyons honnête, plutôt copier coller

    Si vous aviez un temps soit peu travailler en python, vous sauriez que le présenter sans indentation, c'est écrire un code totalement illisible et donc inutile.

    Et comme nous ne pouvons pas tester de notre côté, c'est à vous d'essayer de comprendre ce qui ne va pas... car le plus simple pour debug un code quelque-soit le langage, c'est reproduire l'erreur.
    Nom : Capture 1.PNG
Affichages : 2127
Taille : 57,2 KoNom : Capture 2.PNG
Affichages : 2121
Taille : 67,7 Ko

  11. #11
    Membre habitué
    Femme Profil pro
    Chargé de référencement
    Inscrit en
    Octobre 2024
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Octobre 2024
    Messages : 12
    Par défaut
    Citation Envoyé par Elsa_ano Voir le message
    Nom : Capture 1.PNG
Affichages : 2127
Taille : 57,2 KoNom : Capture 2.PNG
Affichages : 2121
Taille : 67,7 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
     
    import PyPDF2
     
     
    def normalize_field_name(field_name):
        """Nettoie et normalise le nom du champ pour correspondre aux clés du dictionnaire."""
        if field_name:
            # Enlever les suffixes comme #0, #1, etc.
            return field_name.split('#')[0].strip()
        return None
     
     
    def extract_form_answers_with_checkboxes(pdf_path):
        form_data = {}
     
        with open(pdf_path, 'rb') as pdf_file:
            reader = PyPDF2.PdfReader(pdf_file)
     
            for page_number, page in enumerate(reader.pages, start=1):
                print(f"\nPage {page_number}")
     
                if '/Annots' in page:
                    for annot in page['/Annots']:
                        field = annot.get_object()
                        field_type = field.get('/FT')
                        field_name = field.get('/T')
                        field_value = field.get('/V')
     
                        if field_name is None:
                            continue  # Ignore les champs sans nom
     
                        # Normaliser le nom du champ
                        normalized_name = normalize_field_name(field_name)
     
                        # Check if the field is a checkbox
                        if field_type == '/Btn':
                            # If field_value is not None, the checkbox is checked
                            checkbox_state = "Checked" if field_value else "Unchecked"
                            if normalized_name not in form_data:
                                form_data[normalized_name] = {}
                            form_data[normalized_name][field_name] = checkbox_state
                        else:
                            # Store regular text fields
                            form_data[normalized_name] = field_value
     
        return form_data
     
     
    def calculate_score_with_checkboxes(form_data):
        score = 0
        # Dictionnaire arbitraire de valeurs associées à chaque checkbox
        values = {
            "Produits 1": 0.5,
            "Produits 2": 2,
            "Produits 3": 3
        }
     
        for normalized_name, choices in form_data.items():
            if isinstance(choices, dict):  # Si c'est un groupe de cases à cocher
                for original_name, checkbox_state in choices.items():
                    if checkbox_state == "Checked":
                        if normalized_name in values:
                            score += values[normalized_name]
                            print(
                                f"{normalized_name} (checked): +{values[normalized_name]} points")
                        break  # Une seule case cochée par groupe
     
        # Affiche la somme totale des points
        print(f"\nTotal score: {score}")
        return score
     
     
    # Chemin vers votre fichier PDF
    pdf_file_path = "....pdf"
     
    # Extraire et afficher les réponses du formulaire, y compris les états des cases à cocher
    form_answers = extract_form_answers_with_checkboxes(pdf_file_path)
    if form_answers:
        for field, answer in form_answers.items():
            print(f"{field}: {answer}")
    else:
        print("Aucun champ de formulaire trouvé ou quelque chose s'est mal passé.")
     
    # Calculer le score basé sur les checkbox cochées
    calculate_score_with_checkboxes(form_answers)
    Dans les champs, j'ai des noms tel que "Produits 1#0" pour Oui, "Produits1#1" pour Non et "Produits1#2" pour "je ne sais pas" par exemple et mon code ne reconnait pas ces champs.

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 540
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 540
    Par défaut
    ton code ne regarde que les boutons (Btn) donc il me semble logique de regarder de quel type serait ces champs pour pouvoir les prendre en compte.
    Si ça n'autorise qu'un choix, je ne pense pas qu'il soit vu comme un checkbox, mais plutôt comme un radiobutton avec, ici, 3 états (0, 1 ou 2).

    A noter que pyPDF2 n'est plus maintenu maintenant sous ce nom et son évolution est pypdf (tout court)
    https://pypi.org/project/PyPDF2/
    => https://pypi.org/project/pypdf/

  13. #13
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 212
    Par défaut
    Hello,
    ben en fait il faudrait que tu montres ce qu'affiche le premier code que j'ai proposé et qui liste tous les champs trouvés dans le PDF. Bien sûr enlever les données confidentielles si il y en a . Ce code utilise la dernière version de pypdf qui comme le souligne umfred englobe maintenant pypdf2.
    [EDIT] il faut se méfier des radio boutons (comme dans mon exemple créé avec LibreOffice) : en général ils sont dans un groupe, il n'y en a qu'un qui est sélectionnable à la fois et par exemple pour mon exemple j'obtiens ceci dans la lecture des champs PDF :
    Langage: {'/T': 'Langage', '/FT': '/Btn', '/Ff': 49152, '/V': '/4', '/DV': '/2', '/Kids': [IndirectObject(27, 0, 1767403459568), IndirectObject(30, 0, 1767403459568), IndirectObject(38, 0, 1767403459568), IndirectObject(40, 0, 1767403459568), IndirectObject(42, 0, 1767403459568)], '/_States_': ['/1', '/2', '/3', '/4', '/5']}
    Langage en fait c'est le nom du premier radio bouton et la valeur /V c'est le radio bouton qui est sélectionné dans le groupe. Dans mon exemple c'est /4 le 4ème radio bouton du groupe. Les noms des autres radio boutons du groupe ne sont pas utilisés.
    Et cela peut varier suivant comment le formulaire a été créé . Voici un formulaire créé aussi avec LibreOffice avec 3 groupes de 3 boutons radio les boutons s'appelles Questionx#1 à Questionx#3 par groupe :
    Nom : Question2.png
Affichages : 2086
Taille : 26,6 Ko
    Voici ce que j'obtiens en lecture des champs :
    Nom: {'/T': 'Nom', '/FT': '/Tx', '/V': 'Jurassic Pork', '/DV': ''}
    Question1#1: {'/T': 'Question1#1', '/FT': '/Btn', '/Ff': 49152, '/V': '/Yes', '/DV': '/Off', '/Kids': [IndirectObject(19, 0, 2261336560624)], '/_States_': ['/Yes']}
    Question1#2: {'/T': 'Question1#2', '/FT': '/Btn', '/Ff': 49152, '/V': '/Off', '/DV': '/Off', '/Kids': [IndirectObject(22, 0, 2261336560624)], '/_States_': ['/Yes']}
    Question1#3: {'/T': 'Question1#3', '/FT': '/Btn', '/Ff': 49152, '/V': '/Off', '/DV': '/Off', '/Kids': [IndirectObject(25, 0, 2261336560624)], '/_States_': ['/Yes']}
    Question2#1: {'/T': 'Question2#1', '/FT': '/Btn', '/Ff': 49152, '/V': '/Off', '/DV': '/Off', '/Kids': [IndirectObject(29, 0, 2261336560624)], '/_States_': ['/Yes']}
    Question2#2: {'/T': 'Question2#2', '/FT': '/Btn', '/Ff': 49152, '/V': '/Yes', '/DV': '/Off', '/Kids': [IndirectObject(32, 0, 2261336560624)], '/_States_': ['/Yes']}
    Question2#3: {'/T': 'Question2#3', '/FT': '/Btn', '/Ff': 49152, '/V': '/Off', '/DV': '/Off', '/Kids': [IndirectObject(35, 0, 2261336560624)], '/_States_': ['/Yes']}
    Question3#1: {'/T': 'Question3#1', '/FT': '/Btn', '/Ff': 49152, '/V': '/Off', '/DV': '/Off', '/Kids': [IndirectObject(39, 0, 2261336560624)], '/_States_': ['/Yes']}
    Question3#2: {'/T': 'Question3#2', '/FT': '/Btn', '/Ff': 49152, '/V': '/Off', '/DV': '/Off', '/Kids': [IndirectObject(42, 0, 2261336560624)], '/_States_': ['/Yes']}
    Question3#3: {'/T': 'Question3#3', '/FT': '/Btn', '/Ff': 49152, '/V': '/Yes', '/DV': '/Off', '/Kids': [IndirectObject(45, 0, 2261336560624)], '/_States_': ['/Yes']}
    D'où l'intérêt de lire tous les champs et toutes les valeurs pour voir ce qu'on lit avec pypdf.
    Voici un exemple de traitement qui calcule un score en appliquant un coefficient suivant le numéro de question et un autre coefficient suivant la réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    from pypdf import PdfReader
    import re  # utilisation des expressions régulières
    reader = PdfReader('d:/temp/Questions2.pdf')
    fields = fields = reader.get_fields()
    score = 0
    coefQ = [1,2,3] # coef des questions: 1 pour la première etc... 
    coefR = [3,0,1] # coef des réponses: 3 pour oui , O pour non, 1 pour je ne sais pas
    for field_name, field_value in fields.items():
         #print(f"{field_name}: {field_value}")
         if "Question" in field_name and field_value.get('/V') == "/Yes":
             #on capture le numéro de question et le numéro de réponse
             res = re.match("Question(\d+).*#(\d+)",field_name)
             #print(res.group(1),res.group(2))
             #on applique les coefficients questions et réponses
             score += coefQ[int(res.group(1)) - 1]*coefR[int(res.group(2)) - 1]
    print('score : ' + str(score))
    Le score est 6 ce qui correspond bien à 1*3 +2*0 + 3*1
    Ami calmant J.P

  14. #14
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Prenez le temps de lire les règles !

Discussions similaires

  1. Creation de fichier PDF
    Par Faith's Fall dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 26/08/2009, 19h05
  2. [C#] Authentification sur les fichiers Pdf
    Par ensisoft dans le forum ASP.NET
    Réponses: 14
    Dernier message: 04/05/2004, 12h10
  3. Streaming fichier PDF
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 22/05/2003, 22h14
  4. [XMLRAD] Fichier PDF
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 2
    Dernier message: 09/01/2003, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo