Script Python pour ajouter automatiquement des noms à des positions spécifiques dans un PDF template.
pip install -r requirements.txt- Placez votre PDF template dans ce dossier et nommez-le
template.pdf - Créez un fichier avec la liste des noms (voir formats supportés ci-dessous)
Un nom par ligne:
Jean Dupont
Marie Martin
Pierre Dubois
Liste de noms:
["Jean Dupont", "Marie Martin", "Pierre Dubois"]Pour définir des positions différentes pour chaque nom:
[
{
"name": "Jean Dupont",
"x": 200,
"y": 400,
"page": 0
},
{
"name": "Marie Martin",
"x": 250,
"y": 350,
"page": 0
}
]Pour utiliser une bounding box avec ajustement automatique de la police:
[
{
"name": "Jean Dupont",
"x": 100,
"y": 300,
"bbox": [200, 50],
"center_h": true,
"center_v": true,
"draw_border": false
},
{
"name": "Marie Martin avec un nom très long",
"x": 100,
"y": 200,
"bbox": [200, 50],
"center_h": true,
"center_v": true
}
]Paramètres de bounding box:
bbox: [largeur, hauteur] en points - définit la zone de textecenter_h: centrer horizontalement (true/false)center_v: centrer verticalement (true/false)draw_border: afficher une bordure de debug (true/false)
Le script accepte des arguments en ligne de commande pour spécifier tous les paramètres.
python add_names_to_pdf.py -t <template.pdf> [options]| Argument | Raccourci | Description | Défaut |
|---|---|---|---|
--template |
-t |
Chemin vers le PDF template (requis) | - |
--names |
-n |
Fichier de noms (.txt, .csv, .json) | names.txt ou names.json |
--output |
-o |
Dossier de sortie | output |
--x-position |
-x |
Position X du texte | 200 |
--y-position |
-y |
Position Y du texte | 400 |
--page |
-p |
Numéro de page (0 = première) | 0 |
--font-name |
- | Nom de la police | Helvetica |
--font-size |
- | Taille de la police (max pour bbox) | 14 |
--font-file |
- | Fichier de police personnalisée (.ttf) | - |
--bbox-width |
- | Largeur de la bounding box | - |
--bbox-height |
- | Hauteur de la bounding box | - |
--center-h |
- | Centrer horizontalement dans bbox | false |
--center-v |
- | Centrer verticalement dans bbox | false |
--draw-border |
- | Dessiner bordure de la bbox | false |
python add_names_to_pdf.py -t template.pdf -n names.txt -x 200 -y 400python add_names_to_pdf.py -t mon_certificat.pdf -n liste.json -o mes_certificats/python add_names_to_pdf.py -t template.pdf -n names.txt -x 297.5 -y 350 --font-size 20python add_names_to_pdf.py -t template.pdf -n names.txt -x 200 -y 400 --font-file mafonte.ttf --font-name MaPolicepython add_names_to_pdf.py -t template.pdf -n names.txt -x 200 -y 400 -p 1python add_names_to_pdf.py -t template.pdf -n names.txt \
-x 100 -y 300 \
--bbox-width 200 --bbox-height 50 \
--center-h --center-vpython add_names_to_pdf.py -t template.pdf -n names.txt \
-x 100 -y 300 \
--bbox-width 200 --bbox-height 50 \
--center-h --center-v \
--draw-borderPour voir tous les arguments disponibles:
python add_names_to_pdf.py --helpLe mode bounding box permet d'ajuster automatiquement la taille de la police pour que le texte tienne dans une zone définie.
- Ajustement automatique de police: Si le texte est trop grand, la police est réduite automatiquement
- Centrage: Options pour centrer le texte horizontalement et/ou verticalement
- Bordure de debug: Afficher une bordure pour visualiser la zone de texte
- Taille minimale: La police ne descendra pas en dessous de 4 points pour rester lisible
- Certificats: Noms de longueurs variables dans une zone fixe
- Badges: Contraintes d'espace strictes
- Formulaires: Champs de taille limitée
Le système de coordonnées PDF:
- L'origine (0, 0) est en bas à gauche de la page
- x augmente vers la droite
- y augmente vers le haut
Pour une page A4 (595 x 842 points):
- Centre: x=297.5, y=421
- En haut au centre: x=297.5, y=700
- En bas au centre: x=297.5, y=100
Astuce: Vous pouvez utiliser des outils comme Adobe Acrobat ou des visualiseurs PDF en ligne pour trouver les coordonnées exactes.
from add_names_to_pdf import PDFNameAdder
# Initialiser
pdf_adder = PDFNameAdder(
template_pdf="template.pdf",
output_dir="output",
font_name="Helvetica",
font_size=14
)
# Ajouter un seul nom
pdf_adder.add_name_to_pdf("Jean Dupont", x=200, y=400)
# Traiter une liste
names = ["Marie Martin", "Pierre Dubois"]
pdf_adder.process_names_list(names, x=200, y=400)
# Avec positions personnalisées
names_data = [
{"name": "Sophie Laurent", "x": 250, "y": 350, "page": 0},
{"name": "Lucas Bernard", "x": 200, "y": 400, "page": 1}
]
pdf_adder.process_names_with_positions(names_data)python add_names_to_pdf.py \
-t certificat_template.pdf \
-n liste_etudiants.txt \
-x 297.5 \
-y 350 \
--font-size 20 \
-o certificats/python add_names_to_pdf.py \
-t badge_template.pdf \
-n participants.txt \
-x 100 \
-y 200 \
--font-size 16 \
-o badges/python add_names_to_pdf.py \
-t carte_template.pdf \
-n employes.json \
-x 50 \
-y 150 \
--font-size 12 \
-o cartes_visite/pdf-mass-edit/
├── add_names_to_pdf.py # Script principal
├── template.pdf # Votre PDF template (à créer)
├── names.txt # Liste de noms (exemple fourni)
├── names.json # Alternative JSON (exemple fourni)
├── requirements.txt # Dépendances Python
├── output/ # Dossier créé automatiquement
│ ├── Jean_Dupont.pdf
│ ├── Marie_Martin.pdf
│ └── ...
└── README.md # Ce fichier
Vérifiez que:
- Les coordonnées (x, y) sont correctes
- Vous utilisez le bon numéro de page (commence à 0)
- Le texte n'est pas en dehors des limites de la page
Assurez-vous que:
- Votre PDF template existe
- Le chemin spécifié avec
-test correct
Vérifiez que:
- Le chemin vers le fichier .ttf est correct
- Le fichier .ttf est valide
- Vous appelez
register_custom_font()avantprocess_names_list()
Ce script est fourni tel quel, libre d'utilisation.