Comment ajouter des numéros de page à un fichier PDF (en Python)

Table of Contents

  1. [Introduction](# orga18657e)
  2. Bibliothèque PDF ReportLab (# org7441e75)
  3. [Combine ReportLab + pdfrw](# org2258be2)
  4. [Utilisation](# orgefcf672)
  5. [Méthode de personnalisation](# orga183ab3)

introduction

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/.

Bibliothèque PDF ReportLab

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.

Combinez ReportLab + pdfrw

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 ... pdfpage.png Ç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? .. ..

comment utiliser

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.

Comment personnaliser

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

Comment ajouter des numéros de page à un fichier PDF (en Python)
Comment obtenir les fichiers dans le dossier [Python]
Ajouter un numéro de page au PDF
Comment développer en Python
Comment convertir des nombres à virgule flottante en nombres binaires en Python
Comment télécharger des fichiers depuis Selenium of Python dans Chrome
[Python] Comment faire PCA avec Python
Convertir Markdown en PDF en Python
Comment collecter des images en Python
Comment utiliser Mysql avec python
Comment envelopper C en Python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Comment gérer le japonais avec Python
[Introduction à Python] Comment utiliser la classe en Python?
[Python] Comment afficher des nombres aléatoires (module aléatoire)
Comment définir dynamiquement des variables en Python
Comment faire R chartr () en Python
Convertir des fichiers écrits en python, etc. en pdf avec la coloration syntaxique
[Itertools.permutations] Comment créer une séquence en Python
Comment utiliser les fonctions dans des fichiers séparés version Perl et version Python
Comment obtenir stacktrace en python
Comment afficher la table quatre-vingt-dix-neuf en python
Comment extraire une zone de polygone en Python
Comment vérifier la version d'opencv avec python
Comment changer de version de Python dans cloud9
Comment régler le contraste de l'image en Python
Comment utiliser __slots__ dans la classe Python
Comment remplir dynamiquement des zéros avec Python
Comment ajouter un module python à l'environnement anaconda
Comment utiliser les expressions régulières en Python
Comment afficher Hello World en python
Comment lire des fichiers CSV avec Pandas
Comment utiliser is et == en Python
Comment écrire Ruby to_s en Python
[Python] Ajouter un commentaire au fichier d'entrée standard
Comment mettre un espace demi-largeur avant les lettres et les chiffres en Python.
Comment utiliser la bibliothèque C en Python
Comment recevoir des arguments de ligne de commande en Python
Convertir le fichier FBX en ASCII <-> BINARY en Python
[REAPER] Comment jouer à Reascript avec Python
Comment effacer un taple dans une liste (Python)
Comment générer une séquence en Python et C ++
Comment incorporer des variables dans des chaînes python
Comment utiliser la bibliothèque d'images Python dans la série python3
Comment créer un fichier JSON en Python
Résumé de l'utilisation de MNIST avec Python
Comment ajouter un chemin de recherche de module Python
Comment spécifier la version TLS dans les requêtes python
Comment vérifier / extraire des fichiers dans un package RPM
Pour ajouter un module à python que vous mettez dans Julialang
Comment notifier les canaux Discord en Python
Comment utiliser tkinter avec python dans pyenv
Comment exécuter LeapMotion avec Python non-Apple
Conversion par lots de fichiers PSD du répertoire en PDF
Obtenez le fichier, la fonction, le numéro de ligne en cours d'exécution en python
[Python] Comment dessiner un histogramme avec Matplotlib
Comment générer "Ketsumaimo" en standard en Python