Table of Contents
La fille d'un élève du primaire scanne les mauvais problèmes d'arithmétique et les rassemble dans un PDF. Cependant, j'avais l'intention d'imprimer uniquement les pages nécessaires, mais les numéros de page sont assez différents, et je dois le refaire plusieurs fois. J'avais l'intention de le rendre électronique, mais c'est étonnamment analogique. Par conséquent, je voulais ajouter automatiquement des numéros de page au fichier PDF. Vous pouvez empêcher le numéro de page de se déplacer en raison d'une erreur humaine, ou vous le remarquerez immédiatement.
Cependant, même si je souhaite numéroter des pages en PDF, je ne trouve pas de moyen étonnamment bon de le faire. À la suite de la recherche, j'ai trouvé des services Web et les ai essayés, mais certains n'aiment pas la position pour mettre la page, et certains sont facturés s'il y a beaucoup de numéros de page (et abonnement mensuel) Etc.
J'ai donc essayé de savoir si les fichiers PDF pouvaient être numérotés avec Python, qui est récemment devenu disponible et se sent bien, mais il ne semble pas y avoir de bibliothèque PDF pour ce cas d'utilisation (du moins seul). J'ai découvert que.
Cet article a également été publié sur https://achiwa912.github.io/.
La bibliothèque PDF la plus connue en Python semble se situer autour de PyPDF2, pdfrw. Ils permettent de fusionner plusieurs fichiers PDF, de les diviser en sens inverse et d'échanger des pages, mais ils ne semblent pas prendre en charge le cas d'utilisation de «l'ajout de numéros de page à des fichiers PDF existants». est.
Après une enquête plus approfondie, j'ai trouvé qu'il était probable que la bibliothèque ReportLab soit capable de numéroter des pages. https://www.blog.pythonlibrary.org/2013/08/12/reportlab-how-to-add-page-numbers/
Cette page Web est un titre très prometteur, mais l'exemple de code soulève des questions. En premier lieu, il semble que le fichier PDF existant n'est pas lu et le numéro de page est donné à la page PDF nouvellement créée. Ce n'est pas bien. .. ..
Je vais également lire le manuel. https://www.reportlab.com/docs/reportlab-userguide.pdf
Encore une fois, il n'y avait aucune explication pour la lecture d'un fichier PDF existant.
Pourtant, quand j'ai continué à chercher sans abandonner, je l'ai trouvé. https://stackoverflow.com/questions/28281108/reportlab-how-to-add-a-footer-to-a-pdf-file
Comme prévu, débordement de pile! Je l'adore avec qiita au Japon. Apparemment, cela dit qu'il semble possible de combiner ReportLab et pdfrw. Il y a aussi une description qui est inquiétante. .. ..
DISCLAIMER: Tested on Linux using as input file a pdf file generated by Reportlab. It would probably not work in an arbitrary pdf file.
"Je l'ai testé avec un fichier PDF créé avec ReportLab, mais je pense qu'il ne fonctionne avec aucun fichier PDF."
... Eh !! Mais c'est la seule chose sur laquelle je peux compter. Essayons.
Modifions l'exemple de code sur la page stakoverflow.
from reportlab.pdfgen.canvas import Canvas
from pdfrw import PdfReader
from pdfrw.toreportlab import makerl
from pdfrw.buildxobj import pagexobj
import sys
import os
if len(sys.argv) != 2 or ".pdf" not in sys.argv[1].lower():
print(f"Usage: python {sys.argv[0]} <pdf filename>")
sys.exit()
input_file = sys.argv[1]
output_file = os.path.splitext(sys.argv[1])[0] + "_pgn.pdf"
reader = PdfReader(input_file)
pages = [pagexobj(p) for p in reader.pages]
canvas = Canvas(output_file)
for page_num, page in enumerate(pages, start=1):
canvas.doForm(makerl(canvas, page))
footer_text = f"{page_num}/{len(pages)}"
canvas.saveState()
canvas.setStrokeColorRGB(0, 0, 0)
canvas.setFont('Times-Roman', 14)
canvas.drawString(290, 10, footer_text)
canvas.restoreState()
canvas.showPage()
canvas.save()
Et quand je le dirige ... Ça, ça a bougé rapidement. Juste au cas où, 7/88 écrit en bas de page est le numéro de page que j'ai mis cette fois. Quel était cet avertissement? .. ..
Puisque nous utilisons une chaîne f, veuillez l'utiliser avec python 3.6 ou version ultérieure.
Installation de la bibliothèque PDF
pip install reportlab
pip install pdfrw
Enregistrez le code ci-dessus sous addpagenum.py. (Changez le nom du fichier comme vous le souhaitez)
Courir
python addpagenum.py <pdf_filename>
Le numéro de page est A4 et s'affiche en bas au centre de la page.
Veuillez modifier cette zone de manière appropriée.
footer_text = f"{page_num}/{len(pages)}"
canvas.setFont('Times-Roman', 14)
canvas.drawString(290, 10, footer_text)
--Modifier le pied de page \ _text pour changer le contenu affiché --Si vous souhaitez modifier la position d'affichage du numéro de page, modifiez x = 290 et y = 10.
Dans le canevas de ReportLab, les coordonnées (x = 0, y = 0) sont en bas à gauche de la page. Si vous souhaitez utiliser une lettre autre que A4, spécifiez-la lors de la création d'un objet canevas. Consultez le manuel ReportLab pour plus d'informations.
Recommended Posts