
- Tu vas choisir la bonne librairie selon ton fichier de départ
- Tu vas éviter de confondre création, fusion et conversion HTML
- Tu vas préparer un PDF propre avec nom, dossier et encodage
- Tu vas savoir quand Python suffit et quand un moteur HTML rend mieux
La requête convertir un fichier en PDF avec Python attire du monde, mais elle cache plusieurs besoins. Certains veulent créer un PDF depuis du texte. D’autres veulent transformer des images, fusionner des fichiers existants, générer une facture ou convertir une page HTML. Les meilleurs résultats clarifient ce point dès le début, parce que la bonne librairie dépend toujours du fichier de départ.
Avant d’écrire du code, définis le type de conversion. Un PDF créé depuis zéro, un PDF fusionné et un HTML transformé en PDF ne se traitent pas avec le même outil.
Le choix rapide de la librairie
Pour un document simple, fpdf2 reste agréable. Pour un rendu plus contrôlé, ReportLab garde une vraie place. Pour assembler, séparer ou modifier un PDF déjà existant, pypdf fait très bien le travail. Pour convertir une page HTML avec CSS, un moteur dédié donne souvent un rendu plus fidèle qu’un script qui place chaque ligne à la main.

| Besoin | Outil conseillé | Pourquoi |
|---|---|---|
| Créer un PDF simple | fpdf2 | Rapide à prendre en main |
| Créer un rapport précis | ReportLab | Meilleur contrôle des blocs et pages |
| Fusionner des PDF | pypdf | Pratique pour assembler ou découper |
| Convertir du HTML | Moteur HTML vers PDF | Plus fidèle pour le CSS et les tableaux |
Les détails qui évitent les PDF cassés
Le premier piège, c’est l’encodage. Si ton PDF contient des accents, choisis une police compatible et teste avec un vrai texte français. Le deuxième piège, c’est le chemin de sortie. Un script lancé depuis un autre dossier peut créer le fichier au mauvais endroit. Utilise un chemin clair, puis affiche le fichier généré à la fin du script pour vérifier.
Le troisième piège, c’est la mise en page. Un PDF ne se comporte pas comme une page web. Si ton contenu tient sur une page courte, tout va bien. Si tu génères des factures, des tableaux, des images et plusieurs pages, prévois les sauts de page et les marges dès le début. Pour automatiser ensuite une collecte de données avant la génération, notre tuto sur le scraper Python avec Beautiful Soup complète bien le sujet.
Fais toujours un PDF de test avec accents, image, tableau et texte long. S’il passe ce test, ton script a déjà évité la plupart des surprises.
Python, ton allié pour transformer du texte en PDF
T’as déjà eu besoin de changer un fichier texte en PDF ? Si t’es un peu comme moi, que tu trouves Python stylé, tu vas adorer la facilité avec laquelle on peut réaliser cette tâche.
À quoi ça sert de convertir en PDF ?
Et si tu te demandes peut-être pourquoi on voudrait transformer un texte en PDF, eh bien c’est simple, imagine que t’as un rapport, un CV ou n’importe quel document que tu veux partager sans que le formatage saute.
Le PDF, c’est ton meilleur pote dans ces moments-là. Tu peux aussi aller plus loin et utiliser la génération de pdf pour le suivi de l’indexation de tes urls par Google par exemple, bref, les possibilités sont infinies !
Les bibliothèques Python nécessaires
Pour commencer, t’auras besoin de la bibliothèque fpdf. Pour l’installer, ouvre ton terminal et tape : pip install fpdf ou -m pip install fpdf
Avantages de fpdf
- Simplicité :
fpdfest facile à utiliser. T’as pas besoin de te plonger dans des docs compliquées. - Personnalisation : Elle offre beaucoup d’options pour personnaliser ton PDF.
- Compatibilité : Fonctionne bien avec différents environnements Python.
Inconvénients de fpdf
- Limitations graphiques : Pour des mises en page complexes ou des graphiques avancés,
fpdfpeut être limité. - Pas de support natif pour les PDF existants : Si tu veux modifier un PDF existant, c’est pas l’idéal.
Autres Bibliothèques
D’autres bibliothèques peuvent aussi faire le taf :
- ReportLab : Plus puissante pour les graphiques complexes, mais plus compliquée à utiliser.
- PyPDF2 : Bien pour manipuler des PDF existants.
- PDFKit : Une bonne option si tu es plus à l’aise avec HTML/CSS qu’avec la mise en page PDF traditionnelle.
La création du script pour convertir ton fichier en pdf
Regarde un peu ce script. Il est court, mais il fait des merveilles.
Le squelette du code
from fpdf import FPDF
def txt_to_pdf(file_path, output_path):
# Créer une instance de FPDF
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
# Ouvrir le fichier texte et l'ajouter au PDF
with open(file_path, 'r') as file:
for line in file:
pdf.cell(200, 10, txt=line, ln=True, align='L')
# Sauvegarder le PDF
pdf.output(output_path)
# Appliquer la fonction
txt_to_pdf("test.txt", "output.pdf")
Décryptage ligne par ligne
- Initialisation : On importe
FPDF. C’est notre outil de base pour créer le PDF. - La fonction magique :
txt_to_pdfprend le chemin de ton fichier texte et l’endroit où tu veux sauvegarder ton PDF. - Création du PDF : On commence par une page vierge et une police basique, Arial de taille 12.
- Lecture et écriture : On lit le fichier texte ligne par ligne et on les écrit sur la page PDF.
- Finalisation : Une fois tout écrit, on sauvegarde le fichier en PDF.
Le résultat :
Améliorations du script
Pour les titres, on veut que ça tape à l’œil. Voici comment tu peux les rendre plus impactants :
from fpdf import FPDF
class MyPDF(FPDF):
# Ajouter un titre
def add_title(self, title):
self.set_xy(10, 20) # Positionner le titre pour éviter la superposition
self.set_font('Arial', 'B', 16)
self.cell(190, 10, title, 0, 1, 'C')
Ajout d’images
Et si tu veux insérer des images ? Facile. Regarde ça :
pdf.image('path/to/image.jpg', x=10, y=30, w=100)Juste quelques lignes, et hop, une image apparaît dans ton PDF.
En-tête et pied de page
Une bon en-tête et pied de page, ça change tout. Ça donne un aspect pro et soigné. Voici comment faire :
class MyPDF(FPDF):
# Personnaliser l'en-tête
def header(self):
self.set_font('Arial', 'I', 8)
self.cell(0, 10, 'Ton En-tête Personnalisé', 0, 0, 'C')
# Personnaliser le pied de page
def footer(self):
self.set_y(-15)
self.set_font('Arial', 'I', 8)
self.cell(0, 10, 'Page %s' % self.page_no(), 0, 0, 'C')
Intégrer les nouvelles fonctionnalités
- Ajouter un Titre :
- Crée une fonction dans la classe
FPDFpour gérer les titres.
- Crée une fonction dans la classe
- Insérer des Images :
- Utilise la méthode
imagedeFPDFpour ajouter des images.
- Utilise la méthode
- Personnaliser En-tête et Pied de Page :
- Surcharge les méthodes
headeretfooterdeFPDF.
- Surcharge les méthodes
from fpdf import FPDF
class MyPDF(FPDF):
# Personnaliser l'en-tête
def header(self):
self.set_font('Arial', 'I', 8)
self.cell(0, 10, 'Ton En-tête Personnalisé', 0, 0, 'C')
# Personnaliser le pied de page
def footer(self):
self.set_y(-15)
self.set_font('Arial', 'I', 8)
self.cell(0, 10, 'Page %s' % self.page_no(), 0, 0, 'C')
# Ajouter un titre
def add_title(self, title):
self.set_xy(10, 20) # Augmente la position y pour éviter la superposition
self.set_font('Arial', 'B', 16)
self.cell(190, 10, title, 0, 1, 'C')
# Fonction pour convertir le texte en PDF
def txt_to_pdf(file_path, output_path):
pdf = MyPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
# Ajouter un titre
pdf.add_title("Mon Titre Stylé")
# Ajouter une image
pdf.image('path/to/image.jpg', x=10, y=100, w=100)
# Ouvrir le fichier texte en mode lecture
with open(file_path, 'r') as file:
for line in file:
pdf.cell(200, 10, txt=line, ln=True, align='L')
# Sauvegarder le PDF
pdf.output(output_path)
# Utiliser la fonction
txt_to_pdf("test.txt", "output.pdf")
Explication détaillée
- Classe
MyPDF: C’est une version personnalisée deFPDFqui inclut les méthodes pour l’en-tête, le pied de page et les titres. - Fonction
txt_to_pdf: Elle crée une instance deMyPDF, ajoute une page, un titre, et lit le fichier texte pour l’ajouter au PDF. Elle ajoute aussi une image.
Affichage du PDF
Personnalise comme tu veux
- En-tête et Pied de Page : Modifie le texte dans
headeretfooterpour qu’ils correspondent à ce que tu veux. - Titre : Change
"Mon Titre Stylé"par ce que tu souhaites comme titre. - Image : Remplace
'path/to/image.jpg'par le chemin de ton image et ajustex,y,w(largeur) pour la positionner comme tu veux.
Convertir plusieurs fichiers texte en pdf
Avant tout, pour bien t’organiser, créer un dossier « dossier_pdfs » qui accueillera tes pdf et un dossier « dossier_textes » pour tes fichier .txt.
Pour faire simple le script va parcourir le dossier de tes fichiers texte pour les convertir et les placer dans le dossier destiné aux pdf. En une petite seconde, tu vas pourra convertir quelque dizaines de fichiers !
import os
from fpdf import FPDF
class MyPDF(FPDF):
# Personnaliser l'en-tête
def header(self):
self.set_font('Arial', 'I', 8)
self.cell(0, 10, 'Ton En-tête Personnalisé', 0, 0, 'C')
# Personnaliser le pied de page
def footer(self):
self.set_y(-15)
self.set_font('Arial', 'I', 8)
self.cell(0, 10, 'Page %s' % self.page_no(), 0, 0, 'C')
# Ajouter un titre
def add_title(self, title):
self.set_xy(10, 20) # Augmente la position y pour éviter la superposition
self.set_font('Arial', 'B', 16)
self.cell(190, 10, title, 0, 1, 'C')
# Fonction pour convertir un seul fichier texte en PDF
def txt_to_pdf(file_path, output_path):
pdf = MyPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
# Ajouter un titre
pdf.add_title("Mon Titre Stylé")
# Ajouter une image
pdf.image('image/image.jpg', x=10, y=100, w=100)
# Ouvrir le fichier texte en mode lecture
with open(file_path, 'r') as file:
for line in file:
pdf.cell(200, 10, txt=line, ln=True, align='L')
# Sauvegarder le PDF
pdf.output(output_path)
# Nouvelle fonction pour traiter plusieurs fichiers
def convert_multiple_txt_to_pdf(folder_path, output_folder):
for filename in os.listdir(folder_path):
if filename.endswith(".txt"):
file_path = os.path.join(folder_path, filename)
output_path = os.path.join(output_folder, filename.replace(".txt", ".pdf"))
txt_to_pdf(file_path, output_path)
# Appel de la fonction pour un dossier spécifique
convert_multiple_txt_to_pdf("dossier_textes", "dossier_pdfs")
Et voilà, t’es désormais équipé pour convertir tes fichiers texte en PDF avec Python, et ce, même en masse ! Avec ces connaissances, t’as le pouvoir de transformer des documents de manière rapide, efficace et automatisée. Que tu sois un pro du code ou un noob, ces scripts Python te rendront la vie plus facile.


