logo

Travailler avec des fichiers PDF en Python

Vous devez tous savoir ce que sont les PDF. En fait, ils constituent l’un des médias numériques les plus importants et les plus utilisés. PDF signifie Format de document portable . Il utilise .pdf extension. Il permet de présenter et d'échanger des documents de manière fiable, indépendamment du matériel logiciel ou du système d'exploitation.
Inventé par Adobe PDF est désormais un standard ouvert maintenu par l'Organisation internationale de normalisation (ISO). Les PDF peuvent contenir des liens et des boutons, des champs de formulaire, de la vidéo audio et une logique métier.
Dans cet article, nous apprendrons comment effectuer diverses opérations telles que :
 

  • Extraire du texte d'un PDF
  • Rotation des pages PDF
  • Fusionner des PDF
  • Fractionner un PDF
  • Ajout d'un filigrane aux pages PDF

Installation: Utiliser des scripts Python simples !
Nous utiliserons un module tiers pypdf.
pypdf est une bibliothèque Python construite comme une boîte à outils PDF. Il est capable de :
 

  • Extraction des informations du document (titre auteur…)
  • Fractionner les documents page par page
  • Fusionner des documents page par page
  • Recadrage des pages
  • Fusionner plusieurs pages en une seule page
  • Cryptage et décryptage de fichiers PDF
  • et plus encore !

Pour installer pypdf, exécutez la commande suivante à partir de la ligne de commande :



pip install pypdf

Ce nom de module est sensible à la casse, alors assurez-vous que le et est en minuscule et tout le reste est en majuscule. Tous les codes et fichiers PDF utilisés dans ce tutoriel/article sont disponibles ici .

itérateur java pour la carte

1. Extraire le texte d'un fichier PDF

Python
# importing required classes from pypdf import PdfReader # creating a pdf reader object reader = PdfReader('example.pdf') # printing number of pages in pdf file print(len(reader.pages)) # creating a page object page = reader.pages[0] # extracting text from page print(page.extract_text()) 

Le résultat du programme ci-dessus ressemble à ceci :
 

quelque chose pour les petits amis
20  
PythonBasics
S.R.Doty
August272008
Contents

1Preliminaries
4
1.1WhatisPython?...................................
..4
1.2Installationanddocumentation....................
.........4 [and some more lines...]

Essayons de comprendre le code ci-dessus en morceaux :
 

reader = PdfReader('example.pdf')  
  • Ici, nous créons un objet de Lecteur PDF classe du module pypdf et transmettez le chemin d'accès au fichier PDF et obtenez un objet lecteur PDF.
     
print(len(reader.pages))  
  • pages La propriété donne le nombre de pages dans le fichier PDF. Par exemple, dans notre cas, il s'agit de 20 (voir la première ligne de sortie).
     
pageObj = reader.pages[0]  
  • Maintenant, nous créons un objet de ObjetPage classe du module pypdf. L'objet lecteur PDF a une fonction pages[] qui prend le numéro de page (à partir de l'index 0) comme argument et renvoie l'objet page.
     
print(pageObj.extract_text())  
  • L'objet Page a une fonction extrait_text() pour extraire le texte de la page PDF.


Note: Bien que les fichiers PDF soient parfaits pour présenter du texte de manière à ce qu’il soit facile à imprimer et à lire, ils ne sont pas faciles à analyser par un logiciel en texte brut. En tant que tel, pypdf peut commettre des erreurs lors de l'extraction du texte d'un PDF et peut même être incapable d'ouvrir certains PDF. Vous ne pouvez malheureusement pas faire grand-chose à ce sujet. pypdf peut tout simplement ne pas être en mesure de fonctionner avec certains de vos fichiers PDF particuliers.

2. Rotation des pages PDF
 

Python
# importing the required classes from pypdf import PdfReader PdfWriter def PDFrotate(origFileName newFileName rotation): # creating a pdf Reader object reader = PdfReader(origFileName) # creating a pdf writer object for new pdf writer = PdfWriter() # rotating each page for page in range(len(reader.pages)): pageObj = reader.pages[page] pageObj.rotate(rotation) # Add the rotated page object to the PDF writer writer.add_page(pageObj) # Write the rotated pages to the new PDF file with open(newFileName 'wb') as newFile: writer.write(newFile) def main(): # original pdf file name origFileName = 'example.pdf' # new pdf file name newFileName = 'rotated_example.pdf' # rotation angle rotation = 270 # calling the PDFrotate function PDFrotate(origFileName newFileName rotation) if __name__ == '__main__': # calling the main function main() 

Ici vous pouvez voir comment la première page de rotation_exemple.pdf ressemble à (image de droite) après rotation :

Rotation d'un fichier pdf' title=

Quelques points importants liés au code ci-dessus :
 

  • Pour la rotation, nous créons d’abord un objet lecteur PDF du PDF original.
writer = PdfWriter()  
  • Les pages pivotées seront écrites dans un nouveau PDF. Pour écrire dans des PDF, nous utilisons l'objet de PdfWriter classe du module pypdf.
for page in range(len(pdfReader.pages)):  
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Maintenant, nous parcourons chaque page du PDF original. Nous obtenons l'objet de page par .pages[] méthode de classe de lecteur PDF. Maintenant, nous faisons pivoter la page de tourner() méthode de classe d’objet de page. Ensuite, nous ajoutons une page à l'objet PDF Writer en utilisant ajouter() méthode de la classe PDF Writer en passant l’objet page pivotée.
newFile = open(newFileName 'wb')  
writer.write(newFile)
newFile.close()
  • Nous devons maintenant écrire les pages PDF dans un nouveau fichier PDF. Tout d'abord, nous ouvrons le nouvel objet fichier et y écrivons des pages PDF en utilisant écrire() méthode d’objet écrivain PDF. Enfin, nous fermons l'objet fichier PDF d'origine et le nouvel objet fichier.

3. Fusion de fichiers PDF

Python
# importing required modules from pypdf import PdfWriter def PDFmerge(pdfs output): # creating pdf file writer object pdfWriter = PdfWriter() # appending pdfs one by one for pdf in pdfs: pdfWriter.append(pdf) # writing combined pdf to output pdf file with open(output 'wb') as f: pdfWriter.write(f) def main(): # pdf files to merge pdfs = ['example.pdf' 'rotated_example.pdf'] # output pdf file name output = 'combined_example.pdf' # calling pdf merge function PDFmerge(pdfs=pdfs output=output) if __name__ == '__main__': # calling the main function main() 

La sortie du programme ci-dessus est un PDF combiné exemple_combiné.pdf obtenu en fusionnant exemple.pdf et rotation_exemple.pdf .
 

  • Jetons un coup d'œil aux aspects importants de ce programme :
     
pdfWriter = PdfWriter()
  • Pour la fusion, nous utilisons une classe prédéfinie PdfWriter du module pypdf.
    Ici, nous créons un objet rédacteur pdf du cours de rédaction de PDF
 # appending pdfs one by one  
for pdf in pdfs:
pdfWriter.append(pdf)
  • Maintenant, nous ajoutons l'objet fichier de chaque PDF à l'objet Writer PDF en utilisant le ajouter() méthode.
 # writing combined pdf to output pdf file  
with open(output 'wb') as f:
pdfWriter.write(f)
  • Enfin, nous écrivons les pages PDF dans le fichier PDF de sortie en utilisant écrire méthode d’objet écrivain PDF.

4. Fractionner le fichier PDF

tableau trier java
Python
# importing the required modules from pypdf import PdfReader PdfWriter def PDFsplit(pdf splits): # creating pdf reader object reader = PdfReader(pdf) # starting index of first slice start = 0 # starting index of last slice end = splits[0] for i in range(len(splits)+1): # creating pdf writer object for (i+1)th split writer = PdfWriter() # output pdf file name outputpdf = pdf.split('.pdf')[0] + str(i) + '.pdf' # adding pages to pdf writer object for page in range(startend): writer.add_page(reader.pages[page]) # writing split pdf pages to pdf file with open(outputpdf 'wb') as f: writer.write(f) # interchanging page split start position for next split start = end try: # setting split end position for next split end = splits[i+1] except IndexError: # setting split end position for last split end = len(reader.pages) def main(): # pdf file to split pdf = 'example.pdf' # split page positions splits = [24] # calling PDFsplit function to split pdf PDFsplit(pdf splits) if __name__ == '__main__': # calling the main function main() 

Le résultat sera trois nouveaux fichiers PDF avec split 1 (page 01) split 2 (page 23) split 3 (page 4-fin) .
Aucune nouvelle fonction ou classe n'a été utilisée dans le programme Python ci-dessus. En utilisant une logique et des itérations simples, nous avons créé les fractionnements du PDF transmis en fonction de la liste transmise. se divise .

qui est Freddie Mercury

5. Ajout d'un filigrane aux pages PDF

Python
# importing the required modules from pypdf import PdfReader PdfWriter def add_watermark(wmFile pageObj): # creating pdf reader object of watermark pdf file reader = PdfReader(wmFile) # merging watermark pdf's first page with passed page object. pageObj.merge_page(reader.pages[0]) # returning watermarked page object return pageObj def main(): # watermark pdf file name mywatermark = 'watermark.pdf' # original pdf file name origFileName = 'example.pdf' # new pdf file name newFileName = 'watermarked_example.pdf' # creating pdf File object of original pdf pdfFileObj = open(origFileName 'rb') # creating a pdf Reader object reader = PdfReader(pdfFileObj) # creating a pdf writer object for new pdf writer = PdfWriter() # adding watermark to each page for page in range(len(reader.pages)): # creating watermarked page object wmpageObj = add_watermark(mywatermark reader.pages[page]) # adding watermarked page object to pdf writer writer.add_page(wmpageObj) # writing watermarked pages to new file with open(newFileName 'wb') as newFile: writer.write(newFile) # closing the original pdf file object pdfFileObj.close() if __name__ == '__main__': # calling the main function main() 

Voici à quoi ressemble la première page du fichier PDF original (à gauche) et filigrané (à droite) :
 

Filigraner le fichier pdf' loading='lazy' title=

  • Tout le processus est le même que dans l’exemple de rotation de page. La seule différence est :
     
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])  
  • L'objet de page est converti en objet de page filigrané à l'aide de add_watermark() fonction.
  • Essayons de comprendre add_watermark() fonction:
     
 reader = PdfReader(wmFile)  
pageObj.merge_page(reader.pages[0])
return pageObj
  • Tout d'abord, nous créons un objet lecteur PDF de filigrane.pdf . Vers l'objet de page transmis que nous utilisons fusion_page() et transmettez l'objet page de la première page de l'objet lecteur PDF en filigrane. Cela superposera le filigrane sur l'objet de page transmis.


Et nous arrivons ici à la fin de ce long tutoriel sur l'utilisation de fichiers PDF en python.
Vous pouvez désormais créer facilement votre propre gestionnaire PDF !
Références :
 

  • https://automatetheboringstuff.com/chapter13/
  • https://pypi.org/project/pypdf/

Si vous aimez GeeksforGeeks et souhaitez contribuer, vous pouvez également écrire un article en utilisant write.geeksforgeeks.org ou envoyer votre article à [email protected]. Consultez votre article apparaissant sur la page principale de GeeksforGeeks et aidez les autres Geeks.
Veuillez écrire des commentaires si vous trouvez quelque chose d'incorrect ou si vous souhaitez partager plus d'informations sur le sujet abordé ci-dessus.
 

Créer un quiz