> Modules non standards > Autres modules non standards > Lecture de pdf
Lecture de pdf
On peut utiliser le package pdfplumber, surtout intéressant pour récupérer des tableaux à partir d'un pdf.
Propriété des objets Page :
- myPage.page_number : le numéro de page
- myPage.extract_text() : extrait tout le texte brut de la page.
- myPage.chars, myPage.lines, myPage.rects, myPage.curves, myPage.images, myPage.figures, myPage.annos, myPage.hyperlinks : renvoie à chaque fois une liste d'objets qui sont en fait des dictionnaires avec des propriétés dépendant du type.
myPage.chars :
- chaque élément correspond à un caractère unique de la page.
- myChar['text'] : le caractère (comme "A")
- fontname, size, height, width : caractéristique du caractère.
- x0, x1, y0, y1, top, bottom, doctop : positionnement du caractère dans la page.
- adv, upright, object_type : autres propriétés.
myPage.lines :
- ce sont les lignes dessinées.
- height, width, linewidth : propriétés de la ligne.
- x0, x1, y0, y1, top, bottom, doctop : positionnement de la ligne
myPage.rects :
- ce sont les rectangles dessinés.
- height, width, linewidth : propriétés du rectangle.
- x0, x1, y0, y1, top, bottom, doctop : positionnement du rectangle
myPage.curves :
- ce sont les courbes dessinés.
- points : les points sous forme d'une liste (x, top)
- height, width, linewidth : dimensions de la courbe.
- x0, x1, y0, y1, top, bottom, doctop : positionnement de la courbe
Transformer une page en image :
- myImage = myPage.to_image(resolution = 400) : génère un objet pdfplumber.display.PageImage
- on peut sauver cet objet dans un fichier : myImage.save('myFile.png')
On peut ainsi extraire les images :
- récupération des propriétés d'une image : myImage = myPage.images[0]
- récupération de la zone de cette image : bbox = (myImage['x0'], myPage.height - myImage['y1'], myImage['x1'], myPage.height - myImage['y0'])
- cropping de la zone et sauvegarde comme image : myPage.crop(bbox).to_image(resolution = 400).save(myFile.png')
Extraction des tables (par analyse des lignes de séparation et aussi de l'alignment des mots :
- myPage.extract_tables() : renvoie une liste de tables, chaque table étant une liste (row) de listes (cellules).
- attention, quand une case est vide, c'est None qui est présent (c'est le cas si par exemple dusion de cellules ou de colonnes)
- myPage.extract_table() : renvoie la plus grande table de la page.
- on peut passer à extract_tables un dictionnaire de settings qui permet d'adapter la stratégie de détermination des tables (le défaut pour vertical_strategy et horizontal_strategy est "lines", ce qui veut dire se baser uniquement sur les lignes
Dans un pdf :
- les mesures dans un pdf sont en points, avec 1 point = 1/72 inch et 1 inch = 2.54 cm
- le texte est sous forme de boites positionnées, chacune comportant un mot, mais pas de relation logique entre les mots (et si mot séparé sur 2 lignes, 2 boites dans relation logique).
Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert