Comment travailler avec des documents PDF avec Python

J'admire vraiment les fichiers PDF (Portable Document Format). Je me souviens du temps où de tels fichiers réglaient des problèmes de formatage lors de l'échange de fichiers en raison de différences dans les versions de Word ou pour d'autres raisons..

Nous parlons principalement de Python ici, n'est-ce pas? Et nous sommes intéressés à lier cela au travail avec des documents PDF. Eh bien, vous pouvez dire que c'est si simple, surtout si vous avez déjà utilisé Python avec des fichiers texte (txt). Mais c'est un peu différent ici. Les documents PDF sont des fichiers binaires et plus complexes que les simples fichiers en texte brut, d’autant plus qu’ils contiennent différents types de police, couleurs, etc..

Cela ne signifie pas qu'il est difficile de travailler avec des documents PDF en utilisant Python, c'est plutôt simple, et l'utilisation d'un module externe résout le problème..

PyPDF2

Comme nous l'avons mentionné ci-dessus, l'utilisation d'un module externe serait la clé. Le module que nous allons utiliser dans ce tutoriel est PyPDF2. Comme il s’agit d’un module externe, la première chose à faire est de: installer ce module. Pour cela, nous allons utiliser pip, qui est (basé sur Wikipedia):

Un système de gestion de paquets utilisé pour installer et gérer les packages logiciels écrits en Python. De nombreux packages peuvent être trouvés dans l'index des packages Python (PyPI).

Vous pouvez suivre les étapes mentionnées dans le Guide de l'utilisateur de Python Packaging pour installer pépin, mais si vous avez Python 2.7.9 et supérieur, ou Python 3.4 et plus haut, vous avez déjà pépin!

PyPDF2 maintenant peut être simplement installé en tapant la commande suivante (dans le Terminal de Mac OS X):

pip installer pypdf2

Génial! Vous avez maintenant PyPDF2 installé, et vous êtes prêt à jouer avec les documents PDF.

Lecture d'un document PDF

Le fichier exemple que nous allons utiliser dans ce tutoriel est sample.pdf. Allez-y et téléchargez le fichier pour suivre le tutoriel, ou vous pouvez simplement utiliser n'importe quel fichier PDF que vous aimez.

Allons-y maintenant et lisons le document PDF. Puisque nous utiliserons PyPDF2, nous devons importer le module comme suit:

importer pypdf2

Après avoir importé le module, nous utiliserons la classe PdfFileReader. Ainsi, le script de lecture du document PDF se présente comme suit:

import PyPDF2 pdf_file = open ('sample.pdf') read_pdf = PyPDF2.PdfFileReader (pdf_file)

Plus d'opérations sur les documents PDF

Après lecture du document PDF, nous pouvons maintenant effectuer différentes opérations sur le document, comme nous le verrons dans cette section..

Nombre de pages

Vérifions le nombre de pages dans sample.pdf. Pour cela, nous pouvons utiliser la méthode getNumPages ():

number_of_pages = read_pdf.getNumPages () print number_of_pages

Dans ce cas, la valeur renvoyée sera 1.

Numéro de page

Voyons maintenant le nombre de pages dans le document PDF. Nous pouvons utiliser la méthode getPageNumber (page), Notez que nous devons passer un objet de type page à la méthode. Pour récupérer un page, nous allons utiliser le getPage (nombre) méthode, où nombre représente le numéro de page dans le document PDF. L'argument nombre commence par la valeur 0.

Eh bien, je sais quand vous utilisez getPage (nombre) vous connaissez déjà le numéro de page, mais ceci est juste pour illustrer comment utiliser ces méthodes ensemble. Cela peut être démontré dans le script suivant:

page = read_pdf.getPage (0) page_number = read_pdf.getPageNumber (page) print page_number

Allez-y, essayez le script. Quelle sortie as-tu eu?

Nous savons que dans échantillon.pdf (le fichier que nous expérimentons), nous n’avons qu’une page (numéro 0). Et si on passait le numéro 1 comme numéro de page getPage (nombre)? Dans ce cas, vous obtiendrez l'erreur suivante:

Traceback (appel le plus récent en dernier): fichier "test.py", ligne 6, dans  page = read_pdf.getPage (1) Fichier "/usr/local/lib/python2.7/site-packages/PyPDF2/pdf.py", ligne 1158, dans getPage, retourne self.flattenedPages [pageNumber] IndexError: liste index hors de intervalle

En effet, la page n'est pas disponible et nous utilisons un numéro de page hors de portée (n'existe pas)..

Mode page

La page PDF comporte différents modes, qui sont les suivants:

/ UseNone Ne pas afficher les contours ou les vignettes
/ UseOutlines
Afficher le panneau des contours (aka signets)
/ UseThumbs
Afficher le panneau des miniatures
/Plein écran
Vue plein écran
/ UseOC
Afficher le panneau Groupe de contenu facultatif (OCG)
/ UseAttachments
Afficher le panneau des pièces jointes

Afin de vérifier notre mode de page, nous pouvons utiliser le script suivant:

page = read_pdf.getPage (0) page_mode = read_pdf.getPageMode () print page_mode

Dans le cas de notre document PDF (échantillon.pdf), la valeur renvoyée est aucun, ce qui signifie que le mode page n'est pas spécifié. Si vous souhaitez spécifier un mode de page, vous pouvez utiliser la méthode setPageMode (mode), où mode est l'un des modes énumérés dans le tableau ci-dessus.

Extraire le texte

Nous avons parcouru le dossier jusqu'à présent, voyons ce qu'il y a à l'intérieur. La méthode extractText () sera notre ami dans cette tâche.

Laissez-moi vous montrer le script complet pour le faire, contrairement à ce que je faisais plus haut en vous montrant uniquement le script requis pour effectuer une opération. Le script permettant d'extraire un texte du document PDF est le suivant:

import PyPDF2 pdf_file = open ('sample.pdf') read_pdf = PyPDF2.PdfFileReader (pdf_file) number_of_pages = read_pdf.getNumPages () page = read_pdf.getPage (0) page_content = page.extractText () print page_content

J'ai été surpris quand j'ai eu la sortie suivante plutôt que celle de échantillon.pdf:

!"# $% # $% &% $ & '() *% +, -%. / 01' * 23% 4 5 '% 1 $ # 26% 3 /% 7 /)) / 8% &) / 26 % 8 # 3 "% 3" *% 313/9 # &)%

Cela est probablement dû à un problème de police, tel que les codes de caractères correspondent à d'autres valeurs. Il est donc parfois un problème avec le document PDF lui-même, car le document PDF peut ne pas contenir les données nécessaires à la restauration du contenu..

J'ai donc essayé un autre fichier, qui est un de mes papiers: paper.pdf. Allez-y et remplacez échantillon.pdf dans le code avec paper.pdf. La sortie dans ce cas était:

Medical Imaging 2012: Perception de l'image, performance des observateurs et évaluation de la technologie, édité par Craig K. Abbey, Claudia R. Mello-Thoms, Proc. de SPIE Vol. 8318, 83181I © 2012 SPIE · Code CCC: 1605-7422 / 12/18 $ · doi: 10.1117 / 12.912389Proc. de SPIE Vol. 8318 83181I-1Téléchargé de la bibliothèque numérique SPIE le 13 août 2012 au 134.130.12.208. Conditions d'utilisation: http://spiedl.org/terms

Mais, où est le reste du texte dans la page? En fait, le extractText () Cette méthode semble ne pas être parfaite et certaines améliorations doivent être apportées. Cependant, le but ici est de vous montrer comment utiliser des fichiers PDF en utilisant Python, et il semble que certaines améliorations doivent être apportées dans le domaine..

Conclusion

Comme nous pouvons le constater, Python simplifie le travail avec les documents PDF. Ce tutoriel vient de donner des pistes à ce sujet et vous pouvez trouver plus de détails sur les différentes opérations que vous pouvez effectuer sur des documents PDF sur la page de documentation de PyPDF2..