FreePDFConversion - Application web de conversion de PDF
Le projet
Dans le cadre de ce projet de développement web, il a été question de concevoir une application web capable de générer des fichiers PDF à partir d'une URL. L'application devait non seulement permettre la création de PDF, mais aussi offrir des fonctionnalités de gestion de ces fichiers, comme l'enregistrement et le téléchargement, tout en étant soumise à des restrictions liées au type de compte utilisateur. Le projet se composait de deux parties distinctes : un microservice dédié à la génération de PDF, et une WebApp qui interagit avec ce microservice. Tout l'environnement de développement a été orchestré à l'aide de Docker.
Architecture et Développement
Microservice
Le microservice a été développé en utilisant Symfony et Gotenberg, une API qui exploite des outils comme Chromium et LibreOffice pour convertir divers formats de documents—tels que HTML, Markdown, Word, Excel—en fichiers PDF. Gotenberg permet d’envoyer une requête à son API RESTful avec, par exemple, un document HTML ou une URL.
Voici comment j'ai procédé :
- Le microservice expose une API avec une route principale qui accepte une URL en paramètre.
- Lorsqu'une requête est envoyée avec une URL, le microservice récupère le contenu HTML de cette URL, puis utilise Gutenberg pour le convertir en PDF. La génération de PDF inclut la gestion des styles CSS pour assurer une fidélité par rapport à la page originale.
- Chaque utilisateur inscrit est lié à un type de compte, qui détermine le nombre de PDF qu'il peut générer. Le microservice intègre un système de suivi pour limiter le nombre de soumissions en fonction du type de compte.
Exemple

La méthode generatePDFfromURL envoie une requête POST à l'API de Gotenberg pour convertir une URL en PDF en utilisant Chromium. Il envoie l'URL à convertir sous forme de multipart/form-data et vérifie si la réponse du serveur a un code de statut 200, indiquant un succès.
WebApp
La deuxième partie du projet, conçue en Symfony, interagit avec le microservice via des appels API. Cette interface utilisateur permet de :
- S'inscrire et Choisir un Compte : Les utilisateurs peuvent créer un compte et choisir entre différents types de comptes (gratuit, premium, etc.), chaque compte peut choisir son offre d'abonnement.
- Soumission d'URL : Une fois connectés, les utilisateurs peuvent soumettre des URLs via un formulaire. L'application envoie ensuite la requête au microservice pour générer le PDF.
- Gestion des PDF : Les utilisateurs peuvent visualiser les PDF générés, les télécharger, les supprimer ou les prévisualiser. Une interface utilisateur permet de suivre le nombre de PDF restants pour le cycle en cours.
- Gestion des Utilisateurs : Un système de gestion des utilisateurs (CRUD), avec des fonctionnalités d'authentification, de réinitialisation de mot de passe, et de gestion de profil.
Exemple

le code ci dessus, présente une méthode de modification d'abonnement d'un utilisateur. D'abord, elle vérifie que l'utilisateur est authentifié en utilisant la méthode getUser(). Si l'utilisateur n'est pas connecté, il est redirigé vers la route de connexion app_login. Ensuite, la méthode récupère tous les abonnements disponibles depuis l'entité Subscription via l'EntityManager pour les afficher.
Si la requête est de type POST, cela signifie que l'utilisateur a soumis un formulaire pour changer son abonnement. La méthode récupère l'ID de l'abonnement sélectionné dans la requête et trouve l'abonnement correspondant dans la base de données. Si l'abonnement est valide, l'abonnement de l'utilisateur est mis à jour en utilisant la méthode setSubscription(). Un message de succès est afficher pour informer l'utilisateur que la mise à jour a été effectuée.
Accédez au Micro-Service.
Accédez à la WebApp.
Images

Page d'accueil

Page de connexion

Page d'inscription

Page de choix des différents abonnements

Page de gestion des abonnements

Page de modification d'abonnement

Page de soumission d'URL

Historique des PDF générés avec possibilité de téléchargement et de prévisualisation

Exemple d'un PDF généré

Page d'un compte utilisateur

Formulaire de modification d'un compte utilisateur