Auteur | Chen Xi
Source | Python ancien
Préface
Cet article concerne principalement:
Application complète du module OS
Application complète du module glob
Fonctionnement du module PyPDF2
Opération de base
Le code du module d'importation PyPDF2 est souvent:
from PyPDF2 import PdfFileReader, PdfFileWriter
Deux méthodes sont importées ici:
PdfFileReader peut être compris comme un lecteur
PdfFileWriter peut être compris comme un écrivain
Ensuite, nous apprendrons plus en détail les merveilles de ces deux outils à travers quelques cas.Le fichier exemple utilisé est le pdf de 5 factures.
Le PDF de chaque facture se compose de deux pages:
fusionner
Le premier travail consiste à fusionner 5 PDF de factures en 10 pages. Comment le lecteur et l'écrivain devraient-ils travailler ensemble ici?
La logique est la suivante:
Le lecteur lit tous les fichiers PDF une fois
Le lecteur transmet le contenu lu à l'écrivain
Sortie unifiée de Writer vers un nouveau pdf
Il y a aussi un point de connaissance important ici: le lecteur ne peut livrer le contenu lu au rédacteur que page par page.
Par conséquent, les première et deuxième étapes de la logique ne sont pas réellement des étapes indépendantes, mais une fois que le lecteur a lu un pdf, il bouclera toutes les pages du pdf et les remettra au rédacteur page par page. Enfin, attendez que tout le travail de lecture soit terminé avant de sortir.
L'examen du code peut rendre l'idée plus claire:
from PyPDF2 import PdfFileReader, PdfFileWriterpath = r'C:\Users\xxxxxx'pdf_writer = PdfFileWriter()for i in range(1, 6): pdf_reader = PdfFileReader(path + '/INV{}.pdf'.format(i))for page in range(pdf_reader.getNumPages()): pdf_writer.addPage(pdf_reader.getPage(page))with open(path + r'\合并PDF\merge.pdf', 'wb') as out: pdf_writer.write(out)
Puisque tout le contenu doit être livré au même rédacteur pour la sortie finale, l'initialisation du rédacteur doit être en dehors du corps de la boucle.
S'il est dans le corps de la boucle, il deviendra un nouvel écrivain pour chaque accès pour lire un pdf, de sorte que le contenu de chaque lecteur remis à l'écrivain sera écrasé à plusieurs reprises, et nos exigences de fusion ne pourront pas être satisfaites!
Le code au début du corps de la boucle:
for i in range(1, 6): pdf_reader = PdfFileReader(path + '/INV{}.pdf'.format(i))
Le but est de lire un nouveau fichier pdf à chaque cycle et de le remettre au lecteur pour les opérations suivantes. En fait, cette méthode d'écriture n'est pas très recommandée, car chaque nom de pdf se trouve être très régulier, vous pouvez donc spécifier directement manuellement le nombre à parcourir. Une meilleure façon est d'utiliser le module glob:
import globfor file in glob.glob(path + '/*.pdf'): pdf_reader = PdfFileReader(path)
Dans le code, pdf_reader.getNumPages (): peut obtenir le nombre de pages du lecteur, et peut parcourir toutes les pages du lecteur avec range.
pdf_writer.addPage (pdf_reader.getPage (page)) peut donner la page actuelle au rédacteur.
Enfin, utilisez avec pour créer un nouveau pdf et le sortir par la méthode pdf_writer.write (out) de l'écrivain
Divisé
Si vous comprenez la coopération du lecteur et de l'écrivain dans l'opération de fusion, alors le fractionnement est facile à comprendre. Ici, nous prenons le fractionnement INV1.pdf en deux documents PDF séparés comme exemple, et nous commencerons également par un trait. logique:
Lecteur pour lire les documents PDF
Lecteur remis à l'auteur page par page
Writer sort immédiatement chaque fois qu'il obtient une page
Grâce à cette logique de code, nous pouvons également comprendre que les positions d'initialisation et de sortie de l'écrivain doivent être dans le corps de la boucle qui lit chaque page de la boucle PDF, et non en dehors de la boucle.
Le code est simple:
from PyPDF2 import PdfFileReader, PdfFileWriterpath = r'C:\Users\xxx'pdf_reader = PdfFileReader(path + '\INV1.pdf')for page in range(pdf_reader.getNumPages()):# 遍历到每一页挨个生成写入器 pdf_writer = PdfFileWriter() pdf_writer.addPage(pdf_reader.getPage(page))# 写入器被添加一页后立即输出产生pdfwith open(path + '\INV1-{}.pdf'.format(page + 1), 'wb') as out: pdf_writer.write(out)
Filigrane
Ce travail consiste à ajouter l'image suivante en filigrane à INV1.pdf
Le premier est le travail de préparation: insérez l'image qui doit être un filigrane dans Word, ajustez la position appropriée et enregistrez-la sous forme de fichier PDF. Ensuite, le code peut être codé et le module de copie doit être utilisé en plus. L'explication spécifique est présentée dans la figure ci-dessous:
Il s'agit d'initialiser le lecteur et le graveur, et de lire d'abord la page PDF du filigrane pour la sauvegarde. Le code de base est un peu plus difficile à comprendre:
Le filigrane consiste essentiellement à fusionner la page PDF en filigrane avec chaque page qui doit être filigranée.
Étant donné que le PDF qui doit être filigrane peut avoir plusieurs pages et que le PDF filigrane n'a qu'une seule page, si le PDF filigrane est fusionné directement, il peut être compris de manière abstraite lorsque la première page est ajoutée et que la page PDF filigrane a disparu.
Par conséquent, il ne peut pas être fusionné directement. Au lieu de cela, les pages PDF filigranées doivent être copiées en continu dans une nouvelle page en veille new_page, puis la méthode .mergePage est utilisée pour terminer la fusion avec chaque page, et la page fusionnée est remise au rédacteur pour une sortie unifiée finale !
À propos de l'utilisation de .mergePage: apparaît sur la page suivante .mergePage (apparaît sur la page supérieure), l'effet final est comme indiqué sur la figure:
chiffrement
Le cryptage est très simple, rappelez-vous simplement: "Le cryptage est pour le cryptage de l'écrivain"
Par conséquent, il suffit d'appeler pdf_writer.encrypt (mot de passe) après la fin de l'opération correspondante
Prenons l'exemple du cryptage d'un seul PDF:
Bien sûr, en plus de la fusion, du fractionnement, du cryptage et du filigrane PDF, nous pouvons également utiliser Python pour combiner Excel et Word afin de répondre à davantage d'exigences d'automatisation, qui sont laissées aux lecteurs pour se développer.
更多精彩推荐
C'est la première fois que vous implémentez l'inférence BERT en temps réel sans sacrifier la précision sur le téléphone mobile, qui est près de 8 fois plus rapide que TensorFlow-Lite et ne prend que 45 ms par image.
Python fait de vous un maître de la peinture IA, ce qui est incroyable! (Avec code))