Python pas cher
- 20+ meilleurs plugins de portfolio et de galerie WordPress en 2020
- Épisode # 251 Construction et test UX du SDK Python d'Azure
- Travailler avec des systèmes linéaires en Python avec scipy.linalg – Real Python
- Comprendre les globes PHP et la portée variable dans WordPress • WPShout
- Le meilleur hébergement WordPress en 2020: un guide honnête
Le format de document portable ou PDF est un format de fichier qui peut être utilisé pour présenter et échanger des documents de manière fiable entre systèmes d'exploitation. Le PDF a été inventé à l'origine par Adobe, mais il s'agit maintenant d'un standard ouvert géré par l'Organisation internationale de normalisation (ISO). Vous pouvez travailler avec un PDF préexistant en Python en utilisant le PyPDF2
paquet.
PyPDF2
est un package pur-Python que vous pouvez utiliser pour différents types d'opérations PDF.
À la fin de cet article, vous saurez comment procéder:
- Extraire les informations du document à partir d'un PDF en Python
- Faire pivoter les pages
- Fusionner des PDF
- PDF divisés
- Ajouter des filigranes
- Crypter un PDF
Commençons!
L'histoire de pyPdf
, PyPDF2
, et PyPDF4
L'original pyPdf
paquet a été libéré en 2005. La dernière version officielle de pyPdf
était en 2010. Après un an environ, une société appelée Phasit a sponsorisé une fourchette de pyPdf
appelé PyPDF2
. Le code a été écrit pour être rétro-compatible avec l'original et a très bien fonctionné pendant plusieurs années, sa dernière version date de 2016.
Il y avait une brève série de versions d'un paquet appelé PyPDF3
, puis le projet a été renommé en PyPDF4
. Tous ces projets font à peu près la même chose, mais la plus grande différence entre pyPdf
et PyPDF2 + est que ces dernières versions ont ajouté la prise en charge de Python 3. Il y a un autre fork en Python 3 de l'original pyPdf
pour Python 3, mais celui-ci n'a pas été maintenu depuis de nombreuses années.
Tandis que PyPDF2
a été récemment abandonné, le nouveau PyPDF4
n'a pas une compatibilité ascendante complète avec PyPDF2
. La plupart des exemples de cet article fonctionneront parfaitement avec PyPDF4
, mais il y en a qui ne peuvent pas, c'est pourquoi PyPDF4
n'est pas présenté plus lourdement dans cet article. Ne hésitez pas à échanger les importations pour PyPDF2
avec PyPDF4
et voyez comment cela fonctionne pour vous.
pdfrw
: Une alternative
Patrick Maupin a créé un package appelé pdfrw
qui peut faire beaucoup des mêmes choses que PyPDF2
Est-ce que. Vous pouvez utiliser pdfrw
pour tous les mêmes types de tâches que vous apprendrez à faire dans cet article pour PyPDF2
, à l’exception notable du cryptage.
La plus grande différence en matière de pdfrw
c’est qu’il s’intègre au package ReportLab afin que vous puissiez créer un nouveau fichier PDF préexistant et en créer un nouveau à l’aide de ReportLab en utilisant tout ou partie du fichier PDF préexistant.
Installation
L'installation PyPDF2
peut être fait avec pépin
ou conda
si vous utilisez Anaconda au lieu de Python standard.
Voici comment installer PyPDF2
avec pépin
:
L'installation est assez rapide PyPDF2
n'a pas de dépendances. Vous passerez probablement autant de temps à télécharger le paquet qu’à l’installer.
Maintenant passons à autre chose et apprenons à extraire des informations d’un fichier PDF.
Vous pouvez utiliser PyPDF2
extraire les métadonnées et du texte d'un PDF. Cela peut être utile lorsque vous effectuez certains types d’automatisation sur vos fichiers PDF préexistants.
Voici les types actuels de données pouvant être extraites:
- Auteur
- Créateur
- Producteur
- Assujettir
- Titre
- Nombre de pages
Vous devez rechercher un fichier PDF à utiliser pour cet exemple. Vous pouvez utiliser n’importe quel fichier PDF que vous avez sur votre machine. Pour faciliter les choses, je suis allé à Leanpub et j'ai pris un échantillon de l'un de mes livres pour cet exercice. L’échantillon que vous souhaitez télécharger s’appelle reportlab-sample.pdf
.
Écrivons du code en utilisant ce fichier PDF et apprenons comment vous pouvez accéder à ces attributs:
# extract_doc_info.py
de PyPDF2 importation PdfFileReader
def extract_information(pdf_path):
avec ouvrir(pdf_path, 'rb') comme F:
pdf = PdfFileReader(F)
information = pdf.getDocumentInfo()
nombre de pages = pdf.getNumPages()
SMS = F"" "
Des informations sur pdf_path:
Auteur: information.author
Créateur: information.creator
Producteur: information.producer
Assujettir: information.subject
Titre: information.title
Nombre de pages: nombre de pages
"" "
impression(SMS)
revenir information
si __prénom__ == '__principale__':
chemin = 'reportlab-sample.pdf'
extract_information(chemin)
Ici vous importez PdfFileReader
du PyPDF2
paquet. le PdfFileReader
est une classe avec plusieurs méthodes pour interagir avec les fichiers PDF. Dans cet exemple, vous appelez .getDocumentInfo ()
, qui retournera une instance de DocumentInformation
. Il contient la plupart des informations qui vous intéressent. Vous appelez également .getNumPages ()
sur l'objet lecteur, qui renvoie le nombre de pages du document.
le information
La variable a plusieurs attributs d'instance que vous pouvez utiliser pour obtenir le reste des métadonnées souhaitées dans le document. Vous imprimez ces informations et les renvoyez également pour une utilisation future éventuelle.
Tandis que PyPDF2
a .extractText ()
, qui peut être utilisé sur ses objets de page (non représentés dans cet exemple), cela ne fonctionne pas très bien. Certains PDF renverront du texte et d’autres une chaîne vide. Lorsque vous souhaitez extraire du texte d’un fichier PDF, vous devez consulter le PDFMiner
projet à la place. PDFMiner
est beaucoup plus robuste et a été spécialement conçu pour extraire du texte à partir de PDF.
Vous êtes maintenant prêt à apprendre comment faire pivoter des pages PDF.
Comment faire pivoter des pages
Parfois, vous recevrez des PDF contenant des pages en mode paysage au lieu du mode portrait. Ou peut-être qu'ils sont même à l'envers. Cela peut se produire lorsque quelqu'un numérise un document au format PDF ou par courrier électronique. Vous pouvez imprimer le document et lire la version papier ou vous pouvez utiliser la puissance de Python pour faire pivoter les pages incriminées.
Pour cet exemple, vous pouvez choisir un article de Real Python et l’imprimer au format PDF.
Apprenons à faire pivoter quelques-unes des pages de cet article avec PyPDF2
:
# rotate_pages.py
de PyPDF2 importation PdfFileReader, PdfFileWriter
def rotation_pages(pdf_path):
pdf_writer = PdfFileWriter()
lecteur PDF = PdfFileReader(chemin)
# Faire pivoter la page de 90 degrés vers la droite
Page 1 = lecteur PDF.getPage(0).le sens des aiguilles d'une montre(90)
pdf_writer.ajouter une page(Page 1)
# Faire pivoter la page de 90 degrés vers la gauche
page 2 = lecteur PDF.getPage(1).rotateCounterClockwise(90)
pdf_writer.ajouter une page(page 2)
# Ajouter une page en orientation normale
pdf_writer.ajouter une page(lecteur PDF.getPage(2))
avec ouvrir('rotate_pages.pdf', 'wb') comme fh:
pdf_writer.écrire(fh)
si __prénom__ == '__principale__':
chemin = 'Jupyter_Notebook_An_Introduction.pdf'
rotation_pages(chemin)
Pour cet exemple, vous devez importer le PdfFileWriter
en plus de PdfFileReader
parce que vous aurez besoin d'écrire un nouveau PDF. rotation_pages ()
prend le chemin vers le PDF que vous souhaitez modifier. Dans cette fonction, vous devrez créer un objet écrivain que vous pourrez nommer. pdf_writer
et un objet lecteur appelé lecteur PDF
.
Ensuite, vous pouvez utiliser .GetPage ()
pour obtenir la page désirée. Ici, vous prenez la page zéro, qui est la première page. Ensuite, vous appelez l’objet page .le sens des aiguilles d'une montre()
méthode et passer à 90 degrés. Ensuite, pour la page deux, vous appelez .rotateCounterClockwise ()
et passez-le également à 90 degrés.
Remarque: le PyPDF2
Ce package vous permet uniquement de faire pivoter une page par incréments de 90 degrés. Vous recevrez un AssertionError
autrement.
Après chaque appel aux méthodes de rotation, vous appelez .ajouter une page()
. Cela ajoutera la version pivotée de la page à l'objet écrivain. La dernière page que vous ajoutez à l'objet écrivain est la page 3 sans aucune rotation.
Enfin, vous écrivez le nouveau PDF en utilisant .écrire()
. Il prend un objet de type fichier en tant que paramètre. Ce nouveau PDF contiendra trois pages. Les deux premiers seront pivotés dans des directions opposées et seront en paysage tandis que la troisième page est une page normale.
Voyons maintenant comment fusionner plusieurs PDF en un seul.
Comment fusionner des PDF
Il existe de nombreuses situations dans lesquelles vous souhaiterez regrouper deux fichiers PDF ou plus et les fusionner en un seul fichier PDF. Par exemple, vous pourriez avoir une page de garde standard devant traiter de nombreux types de rapports. Vous pouvez utiliser Python pour vous aider à faire ce genre de chose.
Pour cet exemple, vous pouvez ouvrir un PDF et imprimer une page en tant que PDF séparé. Recommencez ensuite, mais avec une page différente. Cela vous donnera quelques entrées à utiliser à titre d'exemple.
Continuons et écrivons du code que vous pourrez utiliser pour fusionner des PDF:
# pdf_merging.py
de PyPDF2 importation PdfFileReader, PdfFileWriter
def merge_pdfs(les chemins, sortie):
pdf_writer = PdfFileWriter()
pour chemin dans les chemins:
lecteur PDF = PdfFileReader(chemin)
pour page dans intervalle(lecteur PDF.getNumPages()):
# Ajouter chaque page à l'objet écrivain
pdf_writer.ajouter une page(lecteur PDF.getPage(page))
# Ecrire le PDF fusionné
avec ouvrir(sortie, 'wb') comme en dehors:
pdf_writer.écrire(en dehors)
si __prénom__ == '__principale__':
les chemins = [[[['document1.pdf', 'document2.pdf']
merge_pdfs(les chemins, sortie='merged.pdf')
Vous pouvez utiliser merge_pdfs ()
lorsque vous avez une liste de fichiers PDF que vous souhaitez fusionner ensemble. Vous aurez également besoin de savoir où enregistrer le résultat. Cette fonction prend donc une liste de chemins d'entrée et un chemin de sortie.
Ensuite, vous passez en boucle sur les entrées et créez un objet lecteur PDF pour chacune d’elles. Ensuite, vous parcourrez toutes les pages du fichier PDF et utiliserez .ajouter une page()
d'ajouter chacune de ces pages à elle-même.
Une fois que vous avez fini d'itérer toutes les pages de tous les PDF de votre liste, vous écrivez le résultat à la fin.
Un élément que je voudrais souligner est que vous pouvez améliorer un peu ce script en ajoutant une série de pages à ajouter si vous ne voulez pas fusionner toutes les pages de chaque fichier PDF. Si vous souhaitez un défi, vous pouvez également créer une interface de ligne de commande pour cette fonction à l’aide de Python. argparse
module.
Voyons comment faire le contraire de la fusion!
Comment diviser des PDF
Il arrive que vous ayez un PDF que vous devez diviser en plusieurs PDF. Cela est particulièrement vrai pour les PDF contenant beaucoup de contenu numérisé, mais il existe une multitude de bonnes raisons de vouloir scinder un PDF.
Voici comment vous pouvez utiliser PyPDF2
diviser votre PDF en plusieurs fichiers:
# pdf_splitting.py
de PyPDF2 importation PdfFileReader, PdfFileWriter
def Divisé(chemin, name_of_split):
pdf = PdfFileReader(chemin)
pour page dans intervalle(pdf.getNumPages()):
pdf_writer = PdfFileWriter()
pdf_writer.ajouter une page(pdf.getPage(page))
sortie = F'name_of_split page.pdf '
avec ouvrir(sortie, 'wb') comme output_pdf:
pdf_writer.écrire(output_pdf)
si __prénom__ == '__principale__':
chemin = 'Jupyter_Notebook_An_Introduction.pdf'
Divisé(chemin, 'jupyter_page')
Dans cet exemple, vous créez à nouveau un objet lecteur PDF et passez en boucle sur ses pages. Pour chaque page du fichier PDF, vous allez créer une nouvelle instance de graveur PDF et y ajouter une seule page. Ensuite, vous écrirez cette page dans un fichier portant un nom unique. Une fois l'exécution du script terminée, chaque page du fichier PDF d'origine doit être fractionnée en fichiers PDF distincts.
Voyons maintenant comment ajouter un filigrane à votre fichier PDF.
Comment ajouter des filigranes
Les filigranes identifient des images ou des motifs sur des documents imprimés et numériques. Certains filigranes ne peuvent être vus que dans des conditions d'éclairage particulières. La raison pour laquelle le filigranage est important est qu'il vous permet de protéger votre propriété intellectuelle, telle que vos images ou vos PDF. Un autre terme pour le filigrane est superposition.
Vous pouvez utiliser Python et PyPDF2
mettre en filigrane vos documents. Vous devez disposer d'un fichier PDF contenant uniquement votre image ou texte en filigrane.
Apprenons à ajouter un filigrane maintenant:
# pdf_watermarker.py
de PyPDF2 importation PdfFileWriter, PdfFileReader
def create_watermark(input_pdf, sortie, filigrane):
watermark_obj = PdfFileReader(filigrane)
watermark_page = watermark_obj.getPage(0)
lecteur PDF = PdfFileReader(input_pdf)
pdf_writer = PdfFileWriter()
# Filigrane toutes les pages
pour page dans intervalle(lecteur PDF.getNumPages()):
page = lecteur PDF.getPage(page)
page.mergePage(watermark_page)
pdf_writer.ajouter une page(page)
avec ouvrir(sortie, 'wb') comme en dehors:
pdf_writer.écrire(en dehors)
si __prénom__ == '__principale__':
create_watermark(
input_pdf='Jupyter_Notebook_An_Introduction.pdf',
sortie='watermarked_notebook.pdf',
filigrane='filigrane.pdf')
create_watermark ()
accepte trois arguments:
input_pdf
: le chemin du fichier PDF à filigranersortie
: le chemin que vous souhaitez enregistrer la version en filigrane du PDFfiligrane
: un PDF contenant votre image ou texte en filigrane
Dans le code, ouvrez le fichier PDF en filigrane et récupérez uniquement la première page du document, car c’est là que votre filigrane doit résider. Ensuite, vous créez un objet lecteur PDF à l’aide de la commande input_pdf
et un générique pdf_writer
objet pour écrire le PDF en filigrane.
La prochaine étape consiste à parcourir les pages du input_pdf
. C'est là que se passe la magie. Vous aurez besoin d'appeler .mergePage ()
et passez le watermark_page
. Lorsque vous faites cela, il superposera la watermark_page
en haut de la page actuelle. Ensuite, vous ajoutez cette page nouvellement fusionnée à votre pdf_writer
objet.
Enfin, vous écrivez sur un disque le fichier PDF nouvellement tatoué, et vous avez terminé!
Le dernier sujet que vous apprendrez est comment PyPDF2
gère le cryptage.
Comment chiffrer un PDF
PyPDF2
ne prend actuellement en charge que l’ajout d’un mot de passe utilisateur et d’un mot de passe propriétaire à un fichier PDF préexistant. En format PDF, un mot de passe de propriétaire vous donnera essentiellement des privilèges d'administrateur sur le PDF et vous permettra de définir des autorisations sur le document. D'autre part, le mot de passe de l'utilisateur vous permet simplement d'ouvrir le document.
Autant que je sache, PyPDF2
ne vous autorise pas réellement à définir des autorisations sur le document, même s'il vous permet de définir le mot de passe du propriétaire.
Quoi qu'il en soit, voici comment vous pouvez ajouter un mot de passe, qui chiffrera également le PDF de manière inhérente:
# pdf_encrypt.py
de PyPDF2 importation PdfFileWriter, PdfFileReader
def add_encryption(input_pdf, output_pdf, mot de passe):
pdf_writer = PdfFileWriter()
lecteur PDF = PdfFileReader(input_pdf)
pour page dans intervalle(lecteur PDF.getNumPages()):
pdf_writer.ajouter une page(lecteur PDF.getPage(page))
pdf_writer.Crypter(utilisateur_pwd=mot de passe, propriétaire_pwd=Aucun,
use_128bit=Vrai)
avec ouvrir(output_pdf, 'wb') comme fh:
pdf_writer.écrire(fh)
si __prénom__ == '__principale__':
add_encryption(input_pdf='reportlab-sample.pdf',
output_pdf='reportlab-encrypted.pdf',
mot de passe='deux Poisson')
add_encryption ()
prend en compte les chemins d'accès PDF d'entrée et de sortie, ainsi que le mot de passe que vous souhaitez ajouter au fichier PDF. Il ouvre ensuite un graveur PDF et un objet lecteur, comme auparavant. Comme vous souhaitez chiffrer l'intégralité du fichier PDF d'entrée, vous devez parcourir toutes ses pages et les ajouter à l'auteur.
La dernière étape consiste à appeler .Crypter()
, qui prend le mot de passe de l'utilisateur, le mot de passe du propriétaire, et si un cryptage 128 bits doit ou non être ajouté. Par défaut, le cryptage 128 bits doit être activé. Si vous le définissez à Faux
, le cryptage 40 bits sera appliqué à la place.
Remarque: Le cryptage PDF utilise RC4 ou AES (Advanced Encryption Standard) pour crypter le PDF conformément à pdflib.com.
Ce n’est pas parce que vous avez crypté votre PDF qu’il est nécessairement sécurisé. Il existe des outils pour supprimer les mots de passe des PDF. Si vous souhaitez en savoir plus, l’Université Carnegie Mellon a rédigé un article intéressant sur le sujet.
Conclusion
le PyPDF2
le paquet est très utile et est généralement assez rapide. Vous pouvez utiliser PyPDF2
pour automatiser les gros travaux et tirer parti de ses capacités pour vous aider à mieux faire votre travail!
Dans ce tutoriel, vous avez appris à:
- Extraire les métadonnées d'un PDF
- Faire pivoter les pages
- Fusionner et diviser des PDF
- Ajouter des filigranes
- Ajouter le cryptage
Gardez également un œil sur le plus récent PyPDF4
paquet car il va probablement remplacer PyPDF2
bientôt. Vous pouvez également vouloir vérifier pdfrw
, qui peut faire beaucoup des mêmes choses que PyPDF2
peut faire.
Lectures complémentaires
Si vous souhaitez en savoir plus sur l'utilisation de fichiers PDF en Python, consultez certaines des ressources suivantes pour plus d'informations:
[ad_2]