Web 2025 - 2026

PDF Generator — Micro-service de génération de PDF

Développement d'un micro-service de génération de PDF couplé à une application Symfony 7. La plateforme propose 8 outils de conversion, une gestion des abonnements (FREE, BASIC, PREMIUM) et un système d'envoi de PDF par email.

Semestre 6 — WR602D
7 mois
Projet individuel
PDF Generator — Capture d'écran de la page d'accueil

Le Contexte

Dans le cadre du cours WR602D (Développement Web et Dispositif Interactif — Semestre 6), j'ai développé une application complète permettant de générer des PDFs à partir de différentes sources : URL, fichiers HTML, texte, images ou documents Office. Le projet devait s'appuyer sur un micro-service externe (Gotenberg) appelé depuis une application Symfony.

Ce projet fait suite au semestre 5 où j'avais travaillé sur des notions comme les fixtures, les services Symfony, les tests de qualité de code ou encore la mise en place de GitHub Actions. Ici, j'ai pu réinvestir et approfondir toutes ces compétences dans un projet plus complet.

Les Objectifs

  • Mettre en place un micro-service de génération de PDF via Gotenberg
  • Créer une interface Twig complète : inscription, connexion, tableau de bord
  • Gérer les abonnements utilisateur (FREE, BASIC, PREMIUM) et les limites d'usage
  • Envoyer les PDFs générés par email (Brevo en production, MailDev en local)
  • Dockeriser l'environnement de développement complet
  • Respecter les bonnes pratiques : PHPStan, PHP_CodeSniffer, PHPUnit, GitHub Actions

La Solution

J'ai structuré l'application autour d'un service Symfony (PdfGeneratorService) qui communique avec Gotenberg via des requêtes HTTP. Les utilisateurs se connectent, choisissent un outil de conversion selon leur plan d'abonnement, et reçoivent leur PDF directement sur la plateforme ou par email.

Fonctionnalités principales :

8 Outils de Conversion

URL, HTML, texte, formulaire, image, Office, fusion et séparation de PDF

Plans d'Abonnement

3 niveaux : FREE (2/jour), BASIC (20/jour, 9,99€), PREMIUM (200/jour, 29,99€)

Envoi par Email

Livraison du PDF en pièce jointe directement dans la boîte mail de l'utilisateur

Historique des Générations

Accès à l'historique et téléchargement des PDFs pour les plans BASIC et PREMIUM

Authentification Sécurisée

Inscription, connexion, réinitialisation de mot de passe via le Security Bundle Symfony

Paiement Stripe

Gestion des abonnements en ligne avec webhooks Stripe pour la mise à jour automatique

Processus de Développement

1

Mise en place de l'environnement Docker

Configuration du Docker Compose avec Symfony, MariaDB, phpMyAdmin, MailDev et Gotenberg. Vérification de chaque service avant de commencer le développement.

2

Modélisation des entités & fixtures

Création des entités Doctrine : User, Plan, UserContact, Generation et Tool. Mise en place des fixtures pour pré-remplir la base de données avec les 3 plans d'abonnement.

3

Authentification & gestion des utilisateurs

Implémentation du système de login, inscription et réinitialisation de mot de passe via le Security Bundle de Symfony.

4

Intégration du micro-service Gotenberg

Développement du PdfGeneratorService qui envoie des requêtes HTTP à Gotenberg pour convertir URLs, HTML, images et fichiers Office en PDF.

5

Gestion des abonnements & paiement Stripe

Mise en place des 3 plans avec leurs limites respectives, intégration de Stripe pour les paiements et webhooks pour la mise à jour automatique des abonnements.

6

Envoi d'emails & déploiement

Configuration de Brevo (SMTP) pour l'envoi des PDFs par email en production, MailDev en local. Déploiement sur VPS et mise en place de GitHub Actions pour la CI/CD.

Défis Rencontrés

Configuration SMTP Brevo

L'URL de connexion Brevo contenait un @ dans le login qui cassait le parsing du DSN. Solution : encoder le @ en %40 directement dans la variable d'environnement.

Structure Docker & chemins Symfony

Le projet Symfony se trouvait dans un sous-dossier www/ du dépôt Git, ce qui a nécessité d'adapter les volumes Docker et la configuration de GitHub Actions.

Intégration Gotenberg

La communication avec Gotenberg demandait de bien formater les requêtes multipart selon le type de conversion. J'ai d'abord testé avec Postman avant d'intégrer les appels dans le service Symfony.

Webhooks Stripe

Gérer les événements asynchrones de Stripe (paiement réussi, abonnement annulé) a nécessité la mise en place d'un contrôleur dédié et la vérification de la signature des requêtes entrantes.

Résultats

8

Outils de conversion PDF disponibles

3

Plans d'abonnement avec gestion des droits

100%

Dockerisé — environnement reproductible

CI/CD

Pipeline GitHub Actions opérationnel

Ce que j'ai appris

Ce projet m'a permis de consolider mes compétences de semestre 5 et d'aller plus loin dans l'architecture d'une vraie application web :

  • Appel d'un micro-service externe depuis Symfony via des requêtes HTTP multipart
  • Gestion fine des droits utilisateur selon un plan d'abonnement avec Doctrine
  • Mise en place d'un environnement Docker complet avec plusieurs services qui communiquent
  • Intégration d'un système de paiement réel avec Stripe et gestion des webhooks
  • Configuration d'un SMTP en production (Brevo) et en développement (MailDev)
  • Application concrète du GitFlow : branches main, develop et feature/*
  • Écriture de tests et respect des outils qualité : PHPStan, PHP_CodeSniffer, PHPUnit
  • Déploiement sur VPS avec pipeline CI/CD GitHub Actions

Autres Projets