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 Portable Document Format . Il utilise .pdf extension. Il permet de présenter et d'échanger des documents de manière fiable, indépendamment du logiciel, du matériel 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 l'audio, de la vidéo et une logique métier.
Dans cet article, nous apprendrons comment effectuer diverses opérations telles que :

si sinon java
  • 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 :



  • Extraire les 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!

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 .

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 :

20 PythonBasics S.R.Doty August27,2008 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 page[] 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. Malheureusement, vous ne pouvez 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




architecture de démarrage à ressort
# 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)):> > ># creating rotated page object> >pageObj>=> reader.pages[page]> >pageObj.rotate(rotation)> > ># adding rotated page object to pdf writer> >pdfWriter.add_page(pageObj)> > ># new pdf file object> >newFile>=> open>(newFileName,>'wb'>)> > ># writing rotated pages to new file> >pdfWriter.write(newFile)> > ># closing the new pdf file object> >newFile.close()> > > 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

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) pdfWriter.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 ajout() méthode de la classe PDF Writer en passant l’objet page pivotée.
newFile = open(newFileName, 'wb') pdfWriter.write(newFile) newFile.close()>
  • Maintenant, nous devons é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> PdfMerger> > > def> PDFmerge(pdfs, output):> ># creating pdf file merger object> >pdfMerger>=> PdfMerger()> > ># appending pdfs one by one> >for> pdf>in> pdfs:> >pdfMerger.append(pdf)> > ># writing combined pdf to output pdf file> >with>open>(output,>'wb'>) as f:> >pdfMerger.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 :
pdfMerger = PdfMerger()>
  • Pour la fusion, nous utilisons une classe prédéfinie, PdfFusion du module pypdf.
    Ici, nous créons un objet pdfFusion de la classe de fusion PDF
for pdf in pdfs: pdfmerger.append(open(focus, 'rb'))>
  • Maintenant, nous ajoutons l'objet fichier de chaque PDF à l'objet de fusion PDF en utilisant le ajouter() méthode.
with open(output, 'wb') as f: pdfMerger.write(f)>
  • Enfin, nous écrivons les pages PDF dans le fichier PDF de sortie en utilisant écrire méthode d'objet de fusion PDF.

4. Fractionner le fichier PDF

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>(start,end):> >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>=> [>2>,>4>]> > ># 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 fractionnement 1 (page 0,1), fractionnement 2 (page 2,3), fractionnement 3 (fin de la page 4) .
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 .

héritage en Java

5. Ajout d'un filigrane aux pages PDF

Python




# importing the required modules> from> pypdf>import> PdfReader> > def> add_watermark(wmFile, pageObj):> ># creating pdf reader object of watermark pdf file> >reader>=> PdfReader(wmFileObj)> > ># 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)> > ># new pdf file object> >newFile>=> open>(newFileName,>'wb'>)> > ># writing watermarked pages to new file> >writer.write(newFile)> > ># closing the new pdf file object> >newFile.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

  • 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 Ajouter un filigrane() fonction.
  • Essayons de comprendre Ajouter un filigrane() fonction:
reader = PdfReader(wmFile) pageObj.merge_page(reader.pages[0]) wmFileObj.close() return pageObj>
  • Tout d'abord, nous créons un objet lecteur PDF de filigrane.pdf . Pour l'objet page transmis, 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.
Désormais, vous pouvez facilement créer votre propre gestionnaire PDF !
Les références:

Si vous aimez techcodeview.com et souhaitez contribuer, vous pouvez également écrire un article en utilisant write.techcodeview.com ou envoyer votre article à [email protected]
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.