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é :
fpdf
est 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,
fpdf
peut ê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_pdf
prend 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
FPDF
pour gérer les titres.
- Crée une fonction dans la classe
- Insérer des Images :
- Utilise la méthode
image
deFPDF
pour ajouter des images.
- Utilise la méthode
- Personnaliser En-tête et Pied de Page :
- Surcharge les méthodes
header
etfooter
deFPDF
.
- 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 deFPDF
qui 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
header
etfooter
pour 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.