comment convertir un fichier en pdf

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

Infographie Python PDF avec ReportLab fpdf2 pypdf et HTML
La bonne librairie dépend du fichier de départ
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é : 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('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 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.

5/5 - (3 votes)