Skip to content

wdjopa/pdf-mass-edit

Repository files navigation

PDF Mass Edit - Ajout de noms automatique

Script Python pour ajouter automatiquement des noms à des positions spécifiques dans un PDF template.

Installation

1. Installer les dépendances

pip install -r requirements.txt

2. Préparer vos fichiers

  • 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)

Formats de fichiers supportés

Option 1: Fichier texte simple (names.txt)

Un nom par ligne:

Jean Dupont
Marie Martin
Pierre Dubois

Option 2: Fichier JSON simple (names.json)

Liste de noms:

["Jean Dupont", "Marie Martin", "Pierre Dubois"]

Option 3: Fichier JSON avec positions personnalisées

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
  }
]

Option 4: Fichier JSON avec bounding box

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 texte
  • center_h: centrer horizontalement (true/false)
  • center_v: centrer verticalement (true/false)
  • draw_border: afficher une bordure de debug (true/false)

Utilisation

Le script accepte des arguments en ligne de commande pour spécifier tous les paramètres.

Syntaxe de base

python add_names_to_pdf.py -t <template.pdf> [options]

Arguments disponibles

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

Exemples d'utilisation

Exemple basique

python add_names_to_pdf.py -t template.pdf -n names.txt -x 200 -y 400

Avec dossier de sortie personnalisé

python add_names_to_pdf.py -t mon_certificat.pdf -n liste.json -o mes_certificats/

Avec police et taille personnalisées

python add_names_to_pdf.py -t template.pdf -n names.txt -x 297.5 -y 350 --font-size 20

Avec police personnalisée (fichier .ttf)

python add_names_to_pdf.py -t template.pdf -n names.txt -x 200 -y 400 --font-file mafonte.ttf --font-name MaPolice

Sur une page spécifique

python add_names_to_pdf.py -t template.pdf -n names.txt -x 200 -y 400 -p 1

Avec bounding box et centrage

python 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

Avec bounding box et bordure de debug

python 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-border

Aide

Pour voir tous les arguments disponibles:

python add_names_to_pdf.py --help

Mode Bounding Box

Le mode bounding box permet d'ajuster automatiquement la taille de la police pour que le texte tienne dans une zone définie.

Fonctionnalités

  1. Ajustement automatique de police: Si le texte est trop grand, la police est réduite automatiquement
  2. Centrage: Options pour centrer le texte horizontalement et/ou verticalement
  3. Bordure de debug: Afficher une bordure pour visualiser la zone de texte
  4. Taille minimale: La police ne descendra pas en dessous de 4 points pour rester lisible

Cas d'usage

  • Certificats: Noms de longueurs variables dans une zone fixe
  • Badges: Contraintes d'espace strictes
  • Formulaires: Champs de taille limitée

Comment trouver les bonnes coordonnées (x, y)?

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.

Utilisation avancée - Script comme module Python

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)

Exemples cas d'usage

Exemple 1: Certificats

python add_names_to_pdf.py \
  -t certificat_template.pdf \
  -n liste_etudiants.txt \
  -x 297.5 \
  -y 350 \
  --font-size 20 \
  -o certificats/

Exemple 2: Badges

python add_names_to_pdf.py \
  -t badge_template.pdf \
  -n participants.txt \
  -x 100 \
  -y 200 \
  --font-size 16 \
  -o badges/

Exemple 3: Cartes de visite

python add_names_to_pdf.py \
  -t carte_template.pdf \
  -n employes.json \
  -x 50 \
  -y 150 \
  --font-size 12 \
  -o cartes_visite/

Structure des fichiers

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

Dépannage

Le texte n'apparaît pas au bon endroit

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

Erreur "Template not found"

Assurez-vous que:

  • Votre PDF template existe
  • Le chemin spécifié avec -t est correct

Police personnalisée ne fonctionne pas

Vérifiez que:

  • Le chemin vers le fichier .ttf est correct
  • Le fichier .ttf est valide
  • Vous appelez register_custom_font() avant process_names_list()

Licence

Ce script est fourni tel quel, libre d'utilisation.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published