comment convertir un fichier en pdf
5/5 - (2 votes)

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 :

  1. ReportLab : Plus puissante pour les graphiques complexes, mais plus compliquée à utiliser.
  2. PyPDF2 : Bien pour manipuler des PDF existants.
  3. 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

  1. Initialisation : On importe FPDF. C’est notre outil de base pour créer le PDF.
  2. La fonction magique : txt_to_pdf prend le chemin de ton fichier texte et l’endroit où tu veux sauvegarder ton PDF.
  3. Création du PDF : On commence par une page vierge et une police basique, Arial de taille 12.
  4. Lecture et écriture : On lit le fichier texte ligne par ligne et on les écrit sur la page PDF.
  5. Finalisation : Une fois tout écrit, on sauvegarde le fichier en PDF.

 

Le résultat :

convertir fichier en pdf avec python

 

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

  1. Ajouter un Titre :
    • Crée une fonction dans la classe FPDF pour gérer les titres.
  2. Insérer des Images :
    • Utilise la méthode image de FPDF pour ajouter des images.
  3. Personnaliser En-tête et Pied de Page :
    • Surcharge les méthodes header et footer de FPDF.
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(<span class="hljs-string">'path/to/image.jpg'</span>, x=<span class="hljs-number">10</span>, y=<span class="hljs-number">100</span>, w=<span class="hljs-number">100</span>)

    # 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 de FPDF 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 de MyPDF, ajoute une page, un titre, et lit le fichier texte pour l’ajouter au PDF. Elle ajoute aussi une image.

 

Affichage du PDF

mettre en forme fichier pdf avec python

 

Personnalise comme tu veux

  • En-tête et Pied de Page : Modifie le texte dans header et footer 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 ajuste x, 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.